2017-02-28 131 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