2016-07-22 38 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