Python Django collectstatics仅收集管理员静态文件
我有一个django应用程序运行在带有Nginx的docker容器中。我的应用程序的所有静态文件(如css、js)都已成功找到,我的nginx.conf文件已按原样配置。但是找不到我的django/admin静态文件 我发现了,并尝试了它所说的: 1) 在settings.py中设置STATIC_URL和STATIC_ROOT 2) 在nginx配置中只定义一个静态条目(带尾随项) 斜杠)。不需要第二个地址为static/admin/:Python Django collectstatics仅收集管理员静态文件,python,django,docker,nginx,Python,Django,Docker,Nginx,我有一个django应用程序运行在带有Nginx的docker容器中。我的应用程序的所有静态文件(如css、js)都已成功找到,我的nginx.conf文件已按原样配置。但是找不到我的django/admin静态文件 我发现了,并尝试了它所说的: 1) 在settings.py中设置STATIC_URL和STATIC_ROOT 2) 在nginx配置中只定义一个静态条目(带尾随项) 斜杠)。不需要第二个地址为static/admin/: location /static/ { alia
location /static/ {
alias /path/to/static/; }
3) 使用collectstatic,它应该收集admin->static/admin。它将住在同一个地点
收集的所有其他静态媒体
python manage.py collectstatic
当我这样做时,我的STATIC_ROOT会接收管理员静态文件,但不会接收我的应用程序静态文件
我对docker卷没有问题。NGINX容器正在接收静态根内容。但我将共享我的.yml文件,因为您可能会检测到其中的错误
“manage.py collectstatic”在我的cldj/Dockerfile中运行
我的文件:
settings.py:
STATIC_URL = '/static/'
STATICFILES_DIRS = ['/proj/static/']
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
nginx.conf:
location /static/ {
autoindex off;
alias /static_files/;
}
docker-compose.yml:
version: '3'
volumes:
static_files:
services:
dj:
build:
context: .
dockerfile: df/cldj/Dockerfile
container_name: dj
volumes:
- ./proj:/proj
- static_files:/proj/static_files
ports:
- 8000:8000
command: gunicorn -w 4 proj.wsgi --bind 0.0.0.0:8000
nx:
build:
context: .
dockerfile: df/nx/Dockerfile
container_name: nx
volumes:
- static_files:/static_files
ports:
- 80:80
- 443:443
depends_on:
- dj
更新
如Abhimanyu所述,我已更改了我的设置.py
:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
使用docker compose build
应用程序容器按需填充collectstatic。但是NGINX容器接收一个名为“static_files”的空文件夹
我意识到,docker compose.yml
在应用程序服务中包含以下行:
volumes:
- ./proj:/proj
- static_files:/proj/static_files
我将其改为指向“static”文件夹(mystatic\u ROOT
):
但是这样一来,整个static/
文件夹又被static/admin
文件夹覆盖了(我的应用程序静态文件丢失了)
更新2(解决方案)
遵循Abhimanyu指令后,我需要使用$docker volume rm static_files
删除旧的静态_文件
现在它工作得很好。使用STATIC\u ROOT=os.path.join(BASE\u DIR,'STATIC/')
然后跑
python manage.py collectstatic
它将在项目目录中创建一个名为static的文件夹。在那里你可以找到你所有的css和js文件“proj/static/”它已经是我的静态文件夹(static\u URL)。这就是为什么我必须设置另一个静态根名称。我在写上面的问题时犯了一个错误(我写了‘myapp/static’)。现在已修复,以避免误解。您已将STATIC_URL='/STATIC/',但尚未将“/STATIC/”传递给STATIC_ROOT。照上面说的去做,它会起作用的。我这样做了,需要删除现有的docker卷。现在它工作得很好。
python manage.py collectstatic