0

我有一个使用mod_python在我们的apache2生产服务器上运行的 django web 应用程序,但没有找到静态文件(css,images ...)

我们所有的静态东西都在/var/my.site/example/static

/var/my.site/example/static/
                           |-admin/
                                  |-css/
                                  |-img/     
                           |-css/
                           |-js/
                           |-img/

现在我想我可以将所有请求别名为我的静态内容,如下所示:

这是apache2 conf:

<VirtualHost  123.123.123:443>
    ... SSL stuff ...
    RewriteEngine On    
    ReWriteOptions Inherit 
    <Location "/example">
        SetHandler python-program
        PythonHandler django.core.handlers.modpython
        SetEnv DJANGO_SETTINGS_MODULE example.settings
        PythonPath "[ \
            '/home/me/Envs/ex/lib/python2.6/site-packages',\
            '/var/my.site',\
            '/home/me/Envs/ex/lib/python2.6/site-packages/django',\
            '/home/me/Envs/ex/lib/python2.6/site-packages/MySQLdb',\
            '/var/my.site/example',\
            '/var/my.site/example/static'] + sys.path"
        PythonDebug Off

    </Location>

    Alias /example/static /var/my.site/example/static    
    <Directory /var/my.site/example/static>
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

这是我的 settings.py

...
STATIC_ROOT = '/var/my.site'
STATIC_URL = '/example/static/'
STATICFILES_DIRS = (
    "/var/my.site/example/static",
)
...

apache-error 日志中没有错误。但是这里的日志来自 apache-secure_access.log

[09/Aug/2012:12:37:55 +0200] "GET /example/admin/ HTTP/1.1" 200 6694
[09/Aug/2012:12:37:55 +0200] "GET /example/static/css/base.css HTTP/1.1" 301 468
[09/Aug/2012:12:37:55 +0200] "GET /example/static/img/logo.png HTTP/1.1" 403 766
[09/Aug/2012:12:37:55 +0200] "GET /example/static/css/base.css/ HTTP/1.1" 500 756
[09/Aug/2012:12:37:55 +0200] "GET /example/static/admin/css/dashboard.css HTTP/1.1" 301 622

但这不起作用,我不确定,如果我什至,是否在正确的轨道上。当我设置时它确实有效DEBUG = True但这只是因为 django 提供所有静态文件。

我究竟做错了什么?

有谁知道一个好的教程或例子?

4

3 回答 3

2

尝试逐步消除问题。

加载静态文件应该完全独立于 Django。VirtualHost尝试在您的配置中注释掉与 Django 相关的所有行。(更改配置后记得重新加载Apache)

如果这样可行,您可能需要采取更多步骤来避免 Django 践踏同一命名空间中的 URL(可能使用SetHandler?)。

如果不是,则静态文件存在更基本的问题。如果您无法解决它,也许ServerFault可以提供帮助?

于 2012-08-09T16:54:38.003 回答
2

在@supervacuo 建议我从 django 中删除所有内容之后,我让 apache 提供静态文件并意识到出了什么问题。

问题是<Location "/example">优先级高于Alias /example/static. Alias我把(上面或下面)放在哪里都没有关系<Location> - tag

为了解决这个问题,我更改了STATIC_URLand STATIC_ROOT,而不是我可以更改Alias不干扰 <Location> - tag

从:

STATIC_ROOT = '/var/my.site'
STATIC_URL = '/example/static/'

Alias /example/static /var/my.site/example/static

至:

STATIC_ROOT = '/var/my.site/example'
STATIC_URL = '/static/'

Alias /static /var/my.site/example/static   
于 2012-08-10T07:31:16.337 回答
0

我能看到的唯一问题是:

"GET /example/static/css/base.css/ HTTP/1.1" 500 756

由于/base.css/不是有效链接;它被传递给 django;并且由于它与 URL 模式不匹配,因此会引发 500。您应该修复具有 errant 的模板/

于 2012-08-10T07:44:06.187 回答