DEBUG = False / "Ошибка сервера (500)" - Django

У меня есть полностью созданный сайт на Django python, и теперь я запускаю его в производство. Я пытаюсь установить DEBUG равным False для производства с ограниченным успехом. Я работал над этой проблемой около недели и вот что у меня получилось.

settings.py

DEBUG = False

ALLOWED_HOSTS = ['*']

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

Это заставляет работать большинство страниц, и я думаю, что страницы, на которых это работает, - это HTML-страницы, расширенные с другой страницы, которая ищет файлы CSS и изображения в теге head, или, по крайней мере, это единственная взаимосвязь, которую я вижу. Некоторые страницы правильно отображают содержимое, а при возникновении ошибки появляется сообщение "Server Error (500)" или что-то в этом роде. Для других страниц, которые не работают, они никогда не отображают правильное содержимое и просто автоматически показывают "Server Error (500)" или что-то в этом роде. Когда он всегда выдает эту ошибку, я получаю ошибку в терминале, которая говорит

raise ValueError("Missing staticfiles manifest entry for '%s'" % clean_name) ValueError: Отсутствует запись манифеста staticfiles для 'style.css'

У меня есть статический CSS-файл style.css, который участвует в некоторых HTML-файлах, но я не вижу проблем с ним и никаких различий между ним и другими CSS-файлами, которые у меня работают. Я действительно застрял на этом этапе и приму любую помощь, которую смогу получить. Спасибо!

P.S. Я уже запустил "python manage.py collectstatic"

Вот как вы можете поступить, если хотите настроить AWS на обслуживание статических файлов в продакшене и позволить серверу разработки Django обрабатывать их в режиме разработки

  1. Установите boto3 и django-storages pip install boto3 django-storages

  2. Добавьте STORAGES к установленным приложениям в настройках проекта Django

    .

    INSTALLED_APP = [ # ..., 'storages', # ... ]

  3. Настройте переменные статических файлов с помощью s3

    .

Заменить:

STATIC_URL = '/staticfiles/'

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

MEDIA_URL = '/mediafiles/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'mediafiles')

By :

USE_S3 = os.getenv('USE_S3') == 'TRUE'

if USE_S3:
    # aws settings
    AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')
    AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
    AWS_STORAGE_BUCKET_NAME = os.getenv('AWS_STORAGE_BUCKET_NAME')
    AWS_DEFAULT_ACL = 'public-read'
    AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
    AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
    # s3 static settings
    AWS_LOCATION = 'static'
    STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{AWS_LOCATION}/'
    STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
else:
    STATIC_URL = '/staticfiles/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

MEDIA_URL = '/mediafiles/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'mediafiles')

NB : Переменная среды USE_S3 используется для включения (установлена в s3) и выключения (не установлена или установлена в TRUE) хранилища FALSE.

Вернуться на верх