2017-02-28 173 views
3

我覺得有點尷尬問一個以前已經回答的問題 - 但是我覺得有一個關於節點提供靜態文件而不是django的問題。由webpack捆綁並由節點提供服務的css沒有任何問題,我遇到的問題是使用get_static_prefix修飾器提供管理員css和其他幾個文件。Django React Nginx提供管理靜態文件

文件結構如下:

root 
    | 
    public 
     - templates 
     - static 
      | <-- collectstatic adding files here 
     - vendor 
    | 
     server 
     - app1 
     - app2 
      | settings.py   

的/ etc/nginx的/網站可用/項目

server { 
    listen xxx.xxx.xxx.xxx:8000; 
    server_name xxx.xxx.xxx.xxx; 
    location /static { 
      alias /root/se/env/public/static/; 
    } 
} 

,並在settings.py

STATIC_URL = '/root/se/env/public/static/' 
MEDIA_URL = '/media/' 
STATIC_ONLY_URL = '/static_only/' 

if not DEBUG: 
    MEDIA = '/media', 
    STATIC_ROOT = '/root/se/env/public/static/' 
    MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'public', 'media') 
    STATICFILES_DIRS = '/root/se/env/public/vendor/static/', 

我的設置現在已經有一段時間了。我對Django相當陌生,並沒有真正瞭解它是如何工作的。從我能理解的STATICFILES_DIRS是collectstatic收集靜態文件的地方,STATIC_ROOT是靜態文件在collectstatic運行後轉儲的地方。我認爲STATIC_URL是我要去的地方 - 但我沒有太多的運氣來搞清楚它。

因爲它站在管理員的CSS無法正常工作時DEBUG = True現在無論如何,所以我錯誤配置了一些東西。它導致:

Not Found: /static/admin/css/base.css 
+0

您是否嘗試將STATIC_URL更改爲「/ static /」?還可以嘗試將nginx位置/靜態更改爲/ static /。 –

+0

@Kamal - 感謝您的回覆。我已經嘗試過,但仍然沒有得到。我已經用更多的信息更新了這個問題。 – monkeyman

回答

2

您的location /static是錯誤的。在形成路徑名時,alias指令替換了部分URI。的location參數和alias參數應該兩端與/,或既不端與/

location /static { 
    alias /root/se/env/public/static; 
} 

或:

location /static/ { 
    alias /root/se/env/public/static/; 
} 

事實上,因爲alias參數與location參數結束,你根本不應該使用alias指令。請參閱the alias documentation末尾的註釋。

location /static { 
    root /root/se/env/public; 
} 
+0

很好,謝謝。我還沒有設法讓管理員的CSS顯示prod,但這讓我更進了一步。 – monkeyman