我使用 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服务于所有静态文件。
我做错了什么?
有没有人知道一个好的教程或示例?
答案 0 :(得分:2)
尝试逐步消除问题。
加载静态文件应完全独立于Django。尝试在VirtualHost
配置中注释掉与Django相关的所有行。 (记得在更改配置后重新加载Apache)
如果可行,可能需要采取更多措施来避免Django践踏同一命名空间中的URL(可能使用SetHandler
?)。
如果没有,静态文件存在更基本的问题。如果您无法解决问题,或许ServerFault可以提供帮助吗?
答案 1 :(得分:2)
@supervacuo建议我从django中删除所有内容后,我得到了apache来提供静态文件并意识到出了什么问题。
问题是<Location "/example">
优先于Alias /example/static
。我放Alias
的位置(<Location> - tag
上方或下方)并不重要。
要解决此问题,我更改了STATIC_URL
和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
答案 2 :(得分:0)
我能看到的唯一问题是:
"GET /example/static/css/base.css/ HTTP/1.1" 500 756
由于/base.css/
不是有效链接;它被传递给django;并且由于它与URL模式不匹配,因此它会引发500.您应该修复具有错误/
的模板。