Django не может найти статические файлы с Debug=False и разрешенными хостами
Привет всем, у меня возникли проблемы с решением этой проблемы: если я превращаю DEBUG в False, я не могу запустить manage.py runserver:
CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False
тогда, допустим, я добавлю что-то в ALLOWED_HOSTS:
ALLOWED_HOSTS = ['*']
or
ALLOWED_HOSTS = ['localhost']
or
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
теперь, я могу сделать manage.py runserver, но статические файлы не работают. Странный.
Если я превращаю DEBUG в True, то он работает с ALLOWED_HOSTS, установленным в nothing, в localhost или в *. Итак, я думаю, проблема связана с DEBUG. Я ничего не понимаю.
3 ответов
на DEBUG
режим, сервер разработки Django обрабатывает обслуживание статических файлов для вас. Однако это не лучший вариант для производства, поскольку он намного более неэффективен, чем настоящий сервер. См.здесь.
обслуживание файлов
в дополнение к этим шагам настройки, вам также нужно будет фактически обслуживать статические файлы.
во время разработки, если вы используете django.ВНО.staticfiles, это будет сделано автоматически runserver, когда DEBUG имеет значение True (см. django.ВНО.staticfiles.просмотр.служить.))(
этот метод крайне неэффективен и, вероятно, небезопасен, поэтому он непригоден для производства.
см. развертывание статических файлов для правильной стратегии обслуживания статических файлов в производственных средах.
проверить здесь, чтобы узнать как обслуживать статические файлы в производство.
EDIT: добавление следующего ответа @alejoss вопрос о просмотре страниц ошибок с DEBUG=True.
я добавил что-то вроде следующего в моем корневом :
if settings.DEBUG:
urlpatterns += patterns(
'',
url(r'^400/$', TemplateView.as_view(template_name='400.html')),
url(r'^403/$', TemplateView.as_view(template_name='403.html')),
url(r'^404/$', 'django.views.defaults.page_not_found'),
url(r'^500/$', 'django.views.defaults.server_error'),
)
возможно, вам придется немного изменить (т. е. 400
и 403
страницы, возможно, придется редактировать, если ваши имена шаблонов отличаются). В принципе, это позволяет вам посетить http://localhost/400
посмотреть свой 400
страница ошибки, http://localhost/403
посмотреть свой 403
страница ошибок и так далее.
Если вам все еще нужен статический сервер локально (например, для тестирования без отладки), вы можете запустить devserver в небезопасном режиме:
manage.py runserver --insecure
хорошо, вот очень чистое решение. вам нужно использовать
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = True
таким образом, в ваших журналах вы можете увидеть, что тогда проблема. Whitenoise возвращает 500 обычно, когда отсутствует какой-либо файл.
вы можете увидеть, что отсутствует в ваших журналах. В моем случае журналов heroku было достаточно.
для получения дополнительной информации: https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions