Используя только gunicorn, django и whitenoise, как мне обслуживать СМИ? - PullRequest
0 голосов
/ 30 октября 2019

У меня наконец-то работает мой сайт, но медиа-файлы не обслуживаются, когда debug = False что мне делать? Я прошел через ад, пытаясь заставить его работать с nginx, следуя этому уроку , но он продолжал ломаться и не служил статическому, помимо прочего, поэтому я пошел с чистым оружием и белым шумом. Я действительно не эксперт в развертывании, только разработка. Пожалуйста помоги. Безопасность не является проблемой для медиа-файлов, потому что загружать их может только администратор, а не конечные пользователи. В частности, мне нужно знать, наступит ли конец света, когда debug = True останется только для медиафайлов. Или, если есть простой способ обслужить их с debug = False.

1 Ответ

0 голосов
/ 30 октября 2019

Вот как я настроил Whitenoise для обслуживания статических файлов для моего приложения. Я использую RedHat 7, но в Ubuntu все должно быть похоже. Моя версия Django - 1.11.

Обратите внимание, что работать с DEBUG = True вне вашей среды разработки небезопасно.

Сначала я настраиваю переменную среды, указывающую на расположение статическогоfiles:

export DJANGO_STATIC_ROOT=/home/<user>/<project>/staticfiles

In settings.py:

## Static files

STATIC_URL = '/static/'

if DEBUG:
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
else:
    STATIC_ROOT = environ['DJANGO_STATIC_ROOT']

## Whitenoise - Insert in 2nd place after SecurityMiddleware

MIDDLEWARE_CLASSES.insert(1,'whitenoise.middleware.WhiteNoiseMiddleware')

# Add app before django.contrib.staticfiles to enable Whitenoise in development

for i, app in enumerate(INSTALLED_APPS):
    if app == 'django.contrib.staticfiles':
        insert_point = i
INSTALLED_APPS.insert(insert_point,'whitenoise.runserver_nostatic')

Каждый раз, когда вы развертываете приложение, обязательно запускайте команду collectstatic для обновления файлов в вашем местоположении DJANGO_STATIC_ROOT:

./manage.py collectstatic

Удачи!

...