Статические файлы обслуживаются только при debug = True и не обслуживаются при False в production для nginx ubuntu 22.04
Я выполнил процедуры установки здесь https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-22-04 и мое приложение Django работает, но всякий раз, когда я включаю debug = False, оно не загружает мои статические файлы.
Ниже приведена моя конфигурация nginx:
server {
listen 80;
server_name server_domain_or_IP;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/sammy/myprojectdir;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
и мой settings.py:
STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'my_site/static')]
Я старался изо всех сил, много исследовал в Интернете и переходил по многим ссылкам, но все равно безрезультатно.
Я думаю, что это связано с тем, что в вашем проекте url.py есть строка:
if settings.DEBUG:
urlpatterns += static(....)
Я также рекомендую заменить root
на alias
:
location /static/ {
alias /home/sammy/myprojectdir;
}
и выполните команду statiс collection:
python3 manage.py collectstatic
и, наконец, убедитесь, что у вас нигде нет условий для проверки режима debug
UPDATE:
Убедитесь, что nginx ищет статику там, где у вас STATIC_ROOT
:
location /static/ {
alias /home/sammy/myprojectdir/static/;
}
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')