2016-07-22 180 views
1

当调试关闭时,我无法让Django正确引用我的静态文件。我知道这个网站上有很多关于此的帖子,但他们都没有解决我的问题。未找到Django静态文件(调试关闭)

我的目录树是这样的:

└── project 
    └── app1 
    └── app1 
    ├── manage.py 
    └── project 
    └── project.sock 
    └── projectenv 
    └── static 
    └── template 

在我settings.py,我有以下:

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, "static/") 

在我的nginx的配置文件,我有以下几点:

location /static { 
     autoindex on; 
     alias /home/user/myproject/static/; 
} 

运行./manage.py collectstatic将我的所有文件正确放置到静态目录中。

然而,在运行我的服务器,所有这些静态文件404:

[22/Jul/2016 17:05:31] "GET /static/lib/bootstrap/js/bootstrap.min.js HTTP/1.1" 404 6418 
[22/Jul/2016 17:05:31] "GET /static/lib/bootstrap/css/bootstrap.min.css HTTP/1.1" 404 6418 
[22/Jul/2016 17:05:31] "GET /static/lib/jquery/jquery.min.js HTTP/1.1" 404 6418 
[22/Jul/2016 17:05:31] "GET /static/lib/bootstrap/js/bootstrap.min.js HTTP/1.1" 404 6418 

静态文件都放在同一个目录中我的manage.py文件。我究竟做错了什么?

在我的urls.py中添加这个工具,但不是我应该直接从nginx服务它们吗?

if settings.DEBUG is False: #if DEBUG is True it will be served automatically 
    urlpatterns += patterns('', 
      url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), 
    ) 

这是因为速度较慢的静态文件渲染经过Django的,而不是由 您的Web服务器提供直接

+0

你能列出你的项目目录结构吗? –

+0

您的应用程序静态文件被提供?你还可以检查'static'目录的权限吗? –

+0

我不知道nginx,但是与Apache服务相比,它看起来很少编码。看看这里的Apache示例https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/#serving-files – HenryM

回答

0

您应该配置您的nginx:编辑nginx.conf方式如下:补充一点:

location ~* ^(/static/|/media/).+.(jpg|jpeg|gif|png|zip|eot|woff|woff2|svg|ttf|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf)$ { 
    root /path/to/parent/folder/of/static/folder; 
} 

到对应于您网站的server {子句,然后重新启动nginx,它应该修复你的pro瑕疵,如果没有 - 检查nginx日志,确保该文件夹对nginx用户/组等具有适当的权限

+0

这个正则表达式与我目前的配置有什么不同?现在不应该当一个URL开始静态指向我的目录? – modesitt