Развертывание статических файлов django в рабочей среде

#python #css #django #nginx #static

#python #css #django #nginx #статический

Вопрос:

Мое приложение django хорошо работает на Ubuntu 14.04 / nginx 1.10 / django 1.10.2 / uwsgi 2.0.14, оно также может загружать статические файлы (js, css, изображения), но файлы css не применяются к моему веб-сайту. Ниже приведена моя конфигурация.

структура приложения

 example.com/
├── example.com
├── static (generated by collectstatic)
│   └── css
│   └── js
│   └── images
├── templates
└── website
    └── static (django collected from)
  

пример настройки uwsgi.com.ini

 [uwsgi]
...
socket=/var/www/example.com/uwsgi.sock
chdir=/var/www/example.com
chmod-socket=664
...
  

nginx.conf

 server {
    listen      80 default_server;
    server_name  example.com;

    charset utf-8;
    access_log  /var/log/nginx/access.log;

    error_page  404              /var/www/example.com/template/404.html;
    error_page  500 502 503 504  /var/www/example.com/template/500.html;

    location / {
        uwsgi_pass      unix:///var/www/example.com/uwsgi.sock;
        include         uwsgi_params;
    }

    location /static/ {
        alias /var/www/example.com/static/;
    }
}
  

setting.py

 INSTALLED_APPS = (
    ...
    'django.contrib.staticfiles',
    ...
)

STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "website/static"),
)

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    ...
]

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
  

После запуска ./manager collectstatic я могу получить доступ к файлам .css, щелкнув исходный путь с веб-страницы в браузере и проверив доступ.log он также возвращает 200, никаких ошибок.log не создан.

 "GET /static/admin/css/base.a846c0e2ef65.css HTTP/1.1" 200
  

Статические файлы, я думаю, уже обслуживаются nginx, но они не работают в рабочей среде (работают в runserver ), есть ли какая-либо конфигурация, которую я пропустил, или выполнение woring, или какое-либо разрешение, которое я должен проверить? Спасибо за помощь.

Комментарии:

1. есть ли какая-либо ошибка, отображаемая в консоли браузера?

2. Я не уверен, но я думаю, что местоположение для /static/ в nginx должно быть : alias /var/www/example.com/website/static/;

3. @Anurag в консоли браузера не выводится ошибка, но дело в том, что я просматриваю папку css в sources> вкладка sources на панели отладки (chrome), файл css существует, но пустой текст, может быть проблема с кешем или?

4. @ruddra, я пробовал, что после перезапуска nginx все статические файлы недоступны, верните 404

5. @pqteru, /static/admin/css/base.a846c0e2ef65.css возвращает css или возвращает пустой? Настройки кажутся нормальными, я подозреваю, что каким-то образом staticfiles_storage вызывает эту проблему .. можете ли вы прокомментировать это и попытаться протестировать? Вы также добавили промежуточное программное обеспечение whitenoise?

Ответ №1:

Согласно обсуждению, класс промежуточного программного обеспечения отсутствовал,

setting.py

 MIDDLEWARE_CLASSES = [
  ...
  'whitenoise.middleware.WhiteNoiseMiddleware',
  ...
]
  

nginx.conf

 server {
    ...
    include /etc/nginx/mime.types;
    ...
}
  

Комментарии:

1. @pqteru Я думал, вы также примете этот ответ 😉