4

我正在尝试将 Django 部署到 apache,但无法让它为我的静态管理文件提供服务。它似乎在 /var/www/static 下寻找它们,我似乎无法改变它。

除了样式之外,管理站点似乎正在工作。我得到一个标题和一个登录表格。我的 django 应用程序也在工作。这是未提供给管理员的静态文件。

使用 Django 1.4.1。

这些文件位于 /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static 下,并从 /home/dutt/vaccapp/backend/static/admin 链接到。

apache错误日志说这个

[Sun Sep 30 10:57:20 2012] [error] [client 192.168.1.10] File does not exist: /var/www/home, referer: http://dathui.example.com/vaccapp/admin/
[Sun Sep 30 10:57:20 2012] [error] [client 192.168.1.10] File does not exist: /var/www/home, referer: http://dathui.example.com/vaccapp/admin/

但我不知道如何改变它。

在我的 django 站点配置中,我有

<VirtualHost *:80>
ServerAdmin me@host.com

    ServerRoot "/home/dutt/vaccapp"
    DocumentRoot "/home/dutt/vaccapp"
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /home/dutt/vaccapp/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

Alias /static/ "/home/dutt/vaccapp/backend/static/"
<Directory "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static">
    Order allow,deny
    Options Indexes
    Allow from all
    IndexOptions FancyIndexing
</Directory>

ServerRoot 未在 apache2.conf 中设置。

从我的 settings.py

STATIC_ROOT = '/home/dutt/vaccapp/backend/'
STATIC_URL = '/static/'

没有添加到 STATICFILES_DIRS。

这被添加到我的 apache2.conf

WSGIScriptAlias /vaccapp /home/dutt/vaccapp/backend/wsgi.py
WSGIPythonPath /home/dutt/vaccapp

<Directory /home/dutt/vaccapp>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
4

5 回答 5

7

ADMIN_MEDIA_PREFIX默认设置为/static/admin/# Deprecated in Django 1.4 (现在使用STATIC_URL + 'admin/'. 结果是一样的。

以下是对 apache 配置的修复:

Alias /static/admin "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static"
Alias /static "/home/dutt/vaccapp/backend/static"
<Directory "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static">
    Order allow,deny
    Options Indexes
    Allow from all
    IndexOptions FancyIndexing
</Directory>

并且 WsgiScriptAlias 必须从主 apache 配置移动到 VirtualHost。

经过长时间的讨论,我们发现问题是 Django 没有正确安装 admin static ...它们彼此符号链接(非常奇怪)。Django 重新安装修复了它,现在它工作正常。

于 2012-09-30T09:20:47.047 回答
1

我的低声誉迫使我写一个完整的答案来为伊戈尔的答案添加一个小细节。

我只是将 apache 配置部分添加到我的配置中,但这还不够。我不得不改变:

"/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static"

"/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin"

在第一个Alias<Directory>指令中。

于 2012-11-08T18:07:34.000 回答
1

就像 Blazor 一样,我不得不使用原始版本的一个小版本。我的设置包括使用 django admin 的graphite-web。我只是发布它以供参考。

我的 apache 的虚拟主机:

<VirtualHost *:80>
    ServerName graphite.myhost.com
    Redirect permanent / https://graphite.myhost.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName graphite.myhost.com

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/graphite.cert
    SSLCertificateKeyFile /etc/apache2/ssl/ssl_graphite.key
    SSLStrictSNIVHostCheck on

    WSGIDaemonProcess _graphite processes=5 threads=5 display-name='%{GROUP}' inactivity-timeout=120 user=_graphite group=_graphite
    WSGIProcessGroup _graphite
    WSGIImportScript /usr/share/graphite-web/graphite.wsgi process-group=_graphite application-group=%{GLOBAL}
    WSGIScriptAlias / /usr/share/graphite-web/graphite.wsgi

    AliasMatch ^/admin/(.*)static/admin(.*)$ /usr/lib/python2.7/dist-packages/django/contrib/admin/static/admin/$2
    <Directory "/usr/lib/python2.7/dist-packages/django/contrib/admin/static/admin/">
            Order allow,deny
            Allow from all
    </Directory>

    Alias /content/ /usr/share/graphite-web/static/
    <Location "/content/">
            SetHandler None
    </Location>

    <Location "/">
            Order allow,deny
            allow from all
            AuthType Basic
            AuthName "Restricted Zone"
            AuthBasicProvider wsgi
            WSGIAuthUserScript /var/www/django_auth.wsgi
            Require valid-user
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/graphite-web_error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/graphite-web_access.log combined

</VirtualHost>

我还添加STATIC_URL = 'static/'只是为了确保我对正则表达式没有任何问题。

于 2013-03-08T21:46:49.360 回答
1

尝试使用下一个

python manage.py collectstatic

staticfiles 应用程序 - Django 文档

于 2013-03-16T01:12:25.940 回答
0

我在运行 Django + Apache 时遇到了类似的问题,Django 管理站点缺少所有样式。这就是我解决它的方法:

apache conf:httpd-app.conf

Alias /static "/...path/to/your/django.../site-packages/django/contrib/admin/static"
<Directory "/...path/to/your/django.../site-packages/django/contrib/admin/static">
    Require all granted
</Directory>

以上,您可以通过以下/...path/to/your/django.../方式找到它pip show django

于 2018-07-03T02:27:32.073 回答