环境:nginx 1.10.3 ,ubuntu 16.04, gunicorn 15.* ,django2.0
用刚刚初始化的工程跑了一边测试服务器没问题,就上了远程小鸡。发现我自己写了一个 index 方法通了(没用到静态文件),但是 x.x.x.x/admin 就 404. 判断是静态文件没能读取。
nginx 设置:
server {
listen 80;
server_name myhost.x.x.x;
location = /favicon.ico { access_log off; log_not_found off;}
location = /static {
alias /var/www/mypat/static;
}
location = /media {
alias /var/www/mypat/media;
}
location = / {
include proxy_params;
proxy_pass http://unix:/var/www/mypat/mypat.sock;
}
}
settings 设置:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
看了 n 篇教程,设置千篇一律,不知道还有什么注意的地方,谢谢看题,感激不尽:)
1
jerryshao 2018-04-03 23:10:13 +08:00
你的 django app 叫 mypat 吗?
试一下把静态文件移到 /var/www/mypat/static/mypat/下面 |
2
xpresslink 2018-04-03 23:11:41 +08:00
settings 这么设置就报错了。
去掉 STATICFILES_DIRS 在生产环境执行一下,python manage.py collectstatic 这个命令会把 admin 用的静态文件从包里收集到 static 目录。 |
3
ihuzhou OP |
4
winix 2018-04-04 00:32:11 +08:00
STATIC_ROOT 和 STATICFILES_DIRS 是不能相同的,runserver 时会有警告
collectstatic 会把 STATICFILES_DIRS 目录下及 admin 的静态文件拷贝到 STATIC_ROOT 目录, 检查一下 STATIC_ROOT 目录下有没有 admin 目录。 |
5
passion336699 2018-04-04 10:31:11 +08:00
同 4#
STATICFILES_DIRS 用来存放公共静态资源文件; STATIC_ROOT,是你执行 collectstatic 后,用来存放被集合的全部静态文件。 所以这俩目录不能相同,你要把 STATIC_ROOT 设置成 'static_cdn' 或者 'static_collect' 等目录名称。 早上没啥事,我专门写了篇文章,希望对你有所帮助: https://www.lovchun.com/posts/how-to-handle-the-static-files-in-django.html |
6
ihuzhou OP @winix 有目录,十分感谢
@passion336699 写的很详细,明白了这三个 STATIC 是什么作用.十分感谢 解决了,是在 nginx 那边配置出了问题 location = /static/ 这样少了个斜杠. 如果我少了斜杠,alias /path/to/my/static_xxx 是不起作用的,查看 404 的链接 http://my.ip.x.x/static/admin/xxx.css 也就是 staitc 路径根本没有解析出来。 还有个问题,根据你们的说法,static 中理论上不带 admin 我 collectstatic 一下,会把 admin 导入到 mysite/static 文件夹。那么我是不是可以不用设置 STATICFILES_DIR ,服务器静态文件直接指向 static.我试了下是可以的. |
7
passion336699 2018-04-04 12:19:20 +08:00
@ihuzhou
如果你整个 Project 里的任意 APP 静态资源文件,完全不考虑公共静态文件存放的话,你不设置 STATICFILES_DIR 肯定是可以的啊。 根据你自己 Project 需求来自定义都行。 我写那么细,只是详细介绍下 STATIC_URL STATICFILES_DIR STATIC_ROOT 三个配置项的意思。 因为我不太清楚你项目是小是大,具体要做什么。 |
8
twor 2018-04-04 16:32:49 +08:00
settings 设置:
STATIC_ROOT = '/var/www/mypat/static' STATIC_URL = '/static/' |