Django collectstatics仅收集管理员静态文件

时间:2018-09-27 13:08:34

标签: python django docker nginx

我有一个使用Nginx在Docker容器中运行的django应用程序。已成功找到我的应用程序的所有静态文件(如css,js),并已将nginx.conf文件配置为应有的状态。但是找不到我的django / admin静态文件。

我找到了this solution,并按提示进行了尝试:

  

1)在设置中同时设置STATIC_URL和STATIC_ROOT。py

     

2)在您的nginx conf中仅定义一个静态条目(带有尾随   斜线)。不需要第二个地址来解决static / admin /:

location /static/  {
    alias /path/to/static/; }
     

3)使用collectstatic应该收集admin-> static / admin。它将与   您收集的所有其余静态媒体。

python manage.py collectstatic

这样做时,我的STATIC_ROOT会收到管理静态文件,但没有收到我的应用程序静态文件。

我对Docker卷没有问题。 NGINX容器正在接收STATIC_ROOT内容。但是,我将共享.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

更新

我更改了我的settings.py,如下文Abhimanyu所述:

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_ROOT):

volumes:
  - ./proj:/proj
  - static_files:/proj/static

但是,这样,整个static/文件夹又被static/admin文件夹覆盖了(我松开了我的应用静态文件)

更新2(解决方案)

按照Abhimanyu的说明进行操作之后,我需要使用static_files删除旧的$docker volume rm static_files卷。

现在一切正常。

1 个答案:

答案 0 :(得分:1)

使用STATIC_ROOT = os.path.join(BASE_DIR, 'static/') 然后运行

python manage.py collectstatic

它将在您的项目目录中创建一个名为static的文件夹。在那里,您将找到所有的CSS和JS文件

相关问题