Почему Django генерирует ошибки HTTP 500 для статических носителей, когда для параметра Debug установлено значение False?

StackOverflow https://stackoverflow.com/questions/121866

  •  02-07-2019
  •  | 
  •  

Вопрос

Я готовлюсь к развертыванию своего приложения Django и заметил, что когда я меняю параметр «DEBUG» на False, все ссылки на статические файлы (т. е. JavaScript, CSS и т. д.) приводят к HTTP 500 ошибки.

Есть идеи, что вызывает эту проблему (и как ее исправить)?

Это было полезно?

Решение

Я настоятельно рекомендую позволить вашему веб-серверу обрабатывать статические запросы, не обращаясь к Django.В моем urls.py, я добавляю статический обработчик запросов только в том случае, если для параметра отладки установлено значение True.

Однако технически Django, обслуживающий статические данные, работает нормально.Обязательно прочитайте короткую страницу документации, http://docs.djangoproject.com/en/dev/howto/static-files/.Вы захотите использовать такую ​​запись в urls.py

(r'^static/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root': '/path/to/media'})

Другие советы

Похоже, вы пытаетесь обслуживать свои статические носители с помощью сервера разработки Django.Взгляни на http://docs.djangoproject.com/en/dev/howto/deployment/ для некоторых сценариев развертывания/методов развертывания и http://docs.djangoproject.com/en/dev/howto/static-files/ о том, как обслуживать статические файлы (но обратите внимание на заявление об отказе от использования этих методов в производстве).

В общем, я бы посмотрел журналы вашего сервера и посмотрел, откуда он пытается получить файлы.Я подозреваю, что 500 ошибок на самом деле являются ошибками 404, но они становятся ошибками 500, потому что Django не может найти или отобразить шаблон 404.html.Если это не так, было бы полезно, если бы вы опубликовали конкретную ошибку 500, которую вы получаете.

Вы также должны повсюду проверять свои URL-адреса.Когда для параметра DEBUG установлено значение False, все URL-адреса без завершающего «/» рассматриваются как ошибка, в отличие от случая, когда у вас DEBUG = True, и в этом случае Django добавит «/» везде, где он отсутствует.Короче говоря, убедитесь, что все ссылки ВЕЗДЕ заканчиваются косой чертой.

Оказывается, я закомментировал SECRET_KEY переменная.Хотя у меня не было возможности узнать это.Просто нужно было что-то попробовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top