Установка DEBUG = Ложь вызывает 500 Ошибка


298

После того, как я изменил DEBUG = False, мой сайт сгенерирует 500 (используя wsgi & manage.py runserver), и в журнале ошибок Apache не будет информации об ошибках, и он будет работать нормально, когда я перейду debugна True.

Я использую Django 1.5 и Python 2.7.3, здесь есть журнал доступа Apache и без какого-либо журнала в журнале ошибок Apache

www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET / HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET /favicon.ico HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET /favicon.ico HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"

Вот мой файл настроек:

import os.path    
DEBUG = False 
#TEMPLATE_DEBUG = DEBUG

HERE = os.path.dirname(__file__)
ADMINS = (
    ('admin', 'xyzadmin@qq.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'zdm',                      # Or path to database file if using sqlite3.
        'USER': 'root',                      # Not used with sqlite3.
        'PASSWORD': 'passwd',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Chicago'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = ''

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
#STATIC_ROOT = os.path.join(HERE, 'static').replace('\\','/')

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'
#STATIC_ROOT = os.path.join(HERE, 'static').replace('\\','/')
S= os.path.join(HERE, 'static').replace('\\','/')

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/home/zdm/static',
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = '9a7!^gp8ojyk-^^d@*whuw!0rml+r+uaie4ur$(do9zz_6!hy0'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'zdm.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'zdm.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/home/zdm/templates',
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'zdm',
    'portal',
    'admin',
    'tagging',
)

Да, я добавил 403 & 404 500 html-файл в мои шаблоны dir
zhiguo.wang

Есть ли у вас файлы 500.html, 404.html и 403.html? Я думаю, что помню проблему с развернутым проектом, у которого не было этих файлов в корне моего каталога шаблонов.
Esse

Если ваш сайт генерирует ошибку 500, в журнале apache должна быть некоторая информация, возможно, вы захотите пропустить часть конца файла журнала ошибок, чтобы люди могли на нее посмотреть.
esse

87
Возможно, вы захотите изменить свой SECRET_KEY теперь, когда он общедоступен ...
Fraxtil

1
Это не ответ для всех. Как показано ниже в stackoverflow.com/a/37218484/4028977 , может быть много причин, почему это происходит. С некоторой простой регистрации вы можете узнать без догадок.
Роб

Ответы:


413

В Django 1.5 введен параметр разрешенных хостов, который необходим по соображениям безопасности. Файл настроек, созданный с помощью Django 1.5, содержит новый раздел, который необходимо добавить:

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.9/ref/settings/#allowed-hosts
ALLOWED_HOSTS = []

Добавьте свой хост здесь, как ['www.beta800.net']или ['*']для быстрого теста, но не используйте ['*']для производства .


32
Ух ты - нам это тяжело. Это действительно отстой, что этот параметр похоронен в документах. Наш производственный сайт не будет работать с DEBUG = False. Спасибо, что указали на это !!!
Шредд

4
Подробнее о проблемах безопасности, связанных с этим параметром: Практические атаки на заголовки HTTP-хоста . Определенно убедит вас не использовать ['*']в производстве.
gertvdijk

4
кипа раздражает, что они даже не вставляют его в качестве значения по умолчанию в settings.py, возможно, с подробным комментарием ...
hwjp

7
Иногда я удивляюсь, почему Джанго становится все более и более отсталым! Конечно, эти парни гораздо лучше программистов, чем я, но я действительно не понимаю решения «исправить» уязвимости на уровне приложений, когда реальным и чистым шагом будет правильная настройка сервера. То же самое касается «кэширования шаблонов» и «постоянных соединений» ... Бесполезный код, который никогда не будет использоваться на серьезном веб-сайте; до сих пор преподносится как святой Грааль программирования! Может быть, только я, я был неправ раньше!
StefanNch

3
Неважно, нашел проблему. Это было связано django-pipelineс поведением России, когда статика еще не была собрана. Как общий совет, размещение точки останова в handle_uncaught_exceptionметоде Django поможет вам понять, что здесь происходит.
Питер

51

Я знаю, что уже поздно, но я закончил с поиском моей ошибки 500 с DEBUG=False, в моем случае это оказалось, ALLOWED_HOSTSно я использовал os.environ.get('variable')для заполнения хостов, я не заметил этого, пока я не включил ведение журнала, вы можете записать все ошибки в файл с помощью приведенного ниже, и он будет регистрироваться, даже если DEBUG=False:

# settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'mysite.log',
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django': {
            'handlers':['file'],
            'propagate': True,
            'level':'DEBUG',
        },
        'MYAPP': {
            'handlers': ['file'],
            'level': 'DEBUG',
        },
    }
}

16
Это должен быть принятый ответ. Гораздо полезнее просто спросить саму структуру, что не так после использования производственных настроек, вместо того, чтобы пытаться угадать.
Стефан Драгнев,

4
На самом деле, это не то, чтобы бродить в темноте. Просто посмотрите на сообщение об ошибке, которое вы обычно видите, используя этот метод. В моем случае в моем файле settings.py отсутствовал другой параметр, который искало мое приложение. Все, что мне было нужно, это журнал, чтобы отследить это. Одно важное примечание: я добавил / path / to / my / django / перед mysite.log, как показано в примере с документами: docs.djangoproject.com/en/1.10/topics/logging/#examples
Rob

4
Я часами искал решение, бесполезно. в соответствии с этим ответом просто используйте ведение журнала, и у вас должна быть проблема, это лучший ответ. Спасибо ОП!
стек

Ошибки моего сервера, кажется, не производят никаких журналов! Я пробовал различные конфигурации регистрации безрезультатно. Любые идеи?
Cammil

5
Спасибо! Это решило мою ошибку. Оказывается, мне нужно было запустить collectstatic для сбора статических ресурсов из пакета.
themessup

33

Я столкнулся с той же проблемой совсем недавно в Django 2.0. Я смог выяснить проблему, установив DEBUG_PROPAGATE_EXCEPTIONS = True. Смотрите здесь: https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions

В моем случае ошибка была ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'. Я исправил это локально python manage.py collectstatic.


Я иду то же самое, но Collectstatic не исправить это для меня. Вы получили сообщение «ошибка не достигнута»? В таком случае, как вы это исправили?
Кави Вайдья

23

В моем случае чтение документов сторонних приложений меня спасло.

Виновник? django_compressor

я имел

{% load compress %}
{% compress css %}
 ... css files linked here ..
{% endcompress %}

DEBUG = True всегда давал мне 500. Чтобы это исправить, мне нужна была строка в моих настройках, чтобы она работала

COMPRESS_ENABLED = os.environ.get('COMPRESS_ENABLED', False)

Спасибо, по этой причине это не сработало для меня, но разве эта строка не мешает django_compressor выполнять свою работу?
Fanckush

1
@Fanckush Нет. Никакого вреда в этом нет. django-compressor.readthedocs.io/en/latest/settings/… Компрессор все равно отлично справится со своей работой! Просто сожмите всю свою статику (например, css), чтобы настройки были бесполезны, поскольку ваши активы уже сжаты
KhoPhi

13

Правильно, в Django 1.5, если DEBUG = False, настройте ALLOWED_HOSTS, добавляя домены без номера порта. пример:

ALLOWED_HOSTS = ['localhost']

По какой-то причине использование «localhost» не работает для меня. Вместо этого мне пришлось использовать IP-адрес «127.0.0.1». Я также мог использовать '*', если вы волнуетесь и просто хотите, чтобы это сработало. Однако я бы не советовал делать это на производстве. OSX работает под управлением Django 1.4.20
BlakePetersen

11

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


3
просто используйте reverse и url tag, и все будет хорошо
maazza

настройка DEBUG=Falseможет также
отображать

даже ссылки на js и css активы?
amchugh89

@ amchugh89: нет, просто "django" URL
webzy

1
Моя проблема в том, что whitenoise не смог найти какое-то изображение и выбрасывал ValueError. Я также не мог найти это, но не знал, как сказать whitenoise, чтобы не искать это. Поэтому я выключил белый шум, использую статическую подачу django, и теперь я могу запустить debug = False in prod. Очевидно, не идеал :(
amchugh89

7

У меня есть веселая история для всех. Добравшись до этой страницы, я сказал: «Эврика! Я спасен. Это должно быть моей проблемой». Поэтому я вставил требуемый ALLOWED_HOSTSсписок в setting.py и ... ничего. Та же старая ошибка 500. И нет, это было не из-за отсутствия файла 404.html.

Поэтому в течение 2 дней я занимался дикими теориями, такими как то, что это было связано с обслуживанием статических файлов (понимаю, что я нуб, и нубы не знают, что они делают).

Так что это было? Теперь г-н Модератор пришел к полезному совету. В то время как моя разработка Django - это версия 1.5. Что-то, моя производственная версия сервера - 1.5. Что-то + 1 ... или, может быть, плюс 2. Что угодно. И так после того, как я добавил ALLOWED_HOSTSв настольную версию settings.py , в которой отсутствовал то, что запрашивал hwjp - «значение по умолчанию в settings.py, возможно, с пояснительным комментарием» - я сделал то же самое на сервере с правильный домен для этого.

Но я не заметил, что на рабочем сервере с более поздней версией Django было значение по умолчанию в settings.py с пояснительным комментарием. Это было намного ниже, где я сделал свою запись, вне поля зрения на мониторе. И, конечно, список был пуст. Отсюда моя трата времени.


1
у меня был точно такой же веселый шаблон!, за исключением того, что он стал веселым только после того, как я нашел это, спасибо. до этого это было просто разочарование
binithb

Что-то, что помогает во всем этом, состоит в том, чтобы использовать local_settings.pyдля каждой среды и затем импортировать это в settings.py.
Никорелиус

1
что мне нравится делать, это иметь каталог settings / вместо settings.py. В этом каталоге вы можете иметь отдельные файлы .py для разных сред и файл base.py для общих настроек. Производственно-зависимые настройки могут затем начаться с импорта * из базовых настроек и просто переопределить все, что им нужно переопределить. Кроме того, требуемый файл init .py, необходимый для того, чтобы превратить этот каталог settings / в действительный модуль, может сначала импортировать из base.py, а затем попытаться импортировать из local.py (который будет существовать только локально). это означает, что вам не нужно указывать локальные настройки вручную
mephisto

7

Дополнение основного ответа.
Меня раздражает изменение глобальных констант ALLOWED_HOSTS и DEBUG settings.pyпри переключении между разработкой и производством. Я использую этот код для автоматической установки этих настроек:

import socket

if socket.gethostname() == "server_name":
    DEBUG = False
    ALLOWED_HOSTS = [".your_domain_name.com",]
    ...
else:
    DEBUG = True
    ALLOWED_HOSTS = ["localhost", "127.0.0.1",]
    ...

Если вы используете macOS, вы можете написать более общий код:

if socket.gethostname().endswith(".local"): # True in your local computer
    DEBUG = True
    ALLOWED_HOSTS = ["localhost", "127.0.0.1",]
else:
    ...

6

Для чего это стоит - я получал 500 с только DEBUG = Falseна некоторых страницах. Отслеживание исключения с помощью pdb выявило недостающий ресурс (я подозреваю, что {% static ... %}тег шаблона был виновником 500).


1
Это также было моей проблемой: базовый шаблон, на который ссылалась пользовательская страница 404, использовал статический тег, но не включал {% load static%} вверху. Я не заметил этого где-то еще, потому что в других моих шаблонах была эта строка, но в любом случае имеет смысл поместить ее в базу, поскольку она повсюду относится к статическим файлам.
Кришан

2
То же решение здесь - я использовал, staticчтобы включить файл CSS, который не существует.
Фил Гифорд

5

Я столкнулся с той же проблемой, когда я сделал DEBUG = FALSE. Вот консолидированное решение, рассмотренное в ответах выше и других постах.

По умолчанию в settings.py у нас есть ALLOWED_HOSTS = []. Вот возможные изменения, которые вы должны будете внести в ALLOWED_HOSTSстоимость в соответствии со сценарием, чтобы избавиться от ошибки:

1: Ваше доменное имя:

ALLOWED_HOSTS = ['www.example.com'] # Your domain name here

2: IP вашего развернутого сервера, если у вас еще нет доменного имени (что было в моем случае и работало как шарм)

ALLOWED_HOSTS = ['123.123.198.123'] # Enter your IP here

3: если вы тестируете на локальном сервере, вы можете отредактировать свой settings.pyили settings_local.pyкак:

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

4: Вы также можете указать «*» в ALLOWED_HOSTSзначении, но это не рекомендуется в производственной среде по соображениям безопасности:

ALLOWED_HOSTS = ['*'] # Not recommended in production environment

Я также разместил подробное решение в своем блоге, к которому вы можете обратиться.


5

ALLOWED_HOSTS - не единственная проблема, для меня мне пришлось создать 404.html и поместить его на базовый уровень моих шаблонов (не на уровне приложения). Кроме того, вы можете создать представление 404 и добавить URL-адрес обработчика 404, но я думаю, что это по желанию. 404.html исправил

в mainproject.urls

handler404 = 'app.views.custom_404'

в app.views

def custom_404(request):
    return render(request, '404.html', {}, status=404)

тогда сделайте шаблон templates / 404.html

получил это из другого сообщения S / O, что я не могу найти его

РЕДАКТИРОВАТЬ

также я получаю 500 ошибок, когда обслуживаю активы с белым шумом. Не могу понять это на всю жизнь, ошибка заключалась в том, что ValueError от whitenoise не смог найти актив, который я тоже не смог найти, пришлось пойти с дефолтным django, обслуживающим пока


8
У меня была такая же проблема с белым шумом. python manage.py collectstaticпочинил это.
Евгений Пахомов

1
@ amchungh89 ты спасатель жизни! Спасибо за указание на это.
Дипак Шарма

5

Я искал и тестировал больше об этой проблеме, и я понял, что причиной этого могут быть каталоги статических файлов, указанные в settings.py, поэтому сначала нужно выполнить эту команду

python manage.py collectstatic

в settings.py код должен выглядеть примерно так:

STATIC_URL = '/static/'

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

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

3

Я знаю, что это очень старый вопрос, но, возможно, я мог бы помочь кому-то еще. Если после установки DEBUG = False у вас возникает ошибка 500, вы всегда можете запустить run.ver manage.py в командной строке, чтобы увидеть ошибки, которые не появятся ни в одном веб-журнале ошибок.


2

Середина 2019 года, и я столкнулся с этой ошибкой после нескольких лет разработки с Django. Озадачил меня всю ночь! Это не было разрешено хосту (который должен выдать 400), все остальное было проверено, наконец, сделал некоторые записи об ошибках, только чтобы обнаружить, что некоторые отсутствующие / или испорченные манифесты статических файлов (после collectstatic) были испорчены при установке. Короче говоря, для тех, кто в замешательстве И ТАК, ЧТО ПРОИЗОЙДЕТ ИСПОЛЬЗОВАТЬ WHITENOISE ИЛИ STANICFILE BACKEND С CACHE (манифест статических файлов), возможно, это для вас.

  1. Убедитесь, что вы все настроили (как я делал для бэкэнда whitenoise ... бэкэнды django читайте дальше) http://whitenoise.evans.io/en/stable/django.html

  2. Если код ошибки 500 все еще сбивает вас с толку, обратите внимание на ваши настройки.STATICFILES_STORAGE.

Установите это либо (для белого шума с компрессией)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

или (оставить по умолчанию в Django)

STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage

В общем, ПРОБЛЕМА, казалось, возникла из-за того, что этот белый кеш + бэкэнд сжатия ->

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

или собственный кеширующий бэкэнд Django ->

STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

... не очень хорошо работал для меня, так как мой CSS ссылался на некоторые другие источники, которые могут быть перепутаны во время кеширования сборщика / бэкэнда. Эта проблема также потенциально освещена в http://whitenoise.evans.io/en/stable/django.html#storage-troubleshoot


1

Я думаю, что это также могут быть настройки http-сервера. Мой все еще сломан и имел ALLOWED_HOSTS все время. Я могу получить к нему доступ локально (я использую gunicorn), но не через доменное имя, когда DEBUG = False. когда я пытаюсь использовать доменное имя, оно выдает мне ошибку, поэтому заставляет меня думать, что это проблема, связанная с nginx.

Вот мой файл conf для nginx:

server {
    listen   80;
    server_name localhost myproject.ca www.myproject.ca;
    root /var/web/myproject/deli_cms;

    # serve directly - analogous for static/staticfiles
    location /media/ {
        # if asset versioning is used
        if ($query_string) {
            expires max;
        }
    }
    location /admin/media/ {
        # this changes depending on your python version
        root /var/web/myproject/lib/python2.6/site-packages/django/contrib;
    }
    location /static/ {
    alias /var/web/myproject/deli_cms/static_root/;
    }

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    }
    # what to serve if upstream is not available or crashes
    error_page 500 502 503 504 /media/50x.html;
}

Мой файл конфигурации gunicorn выглядит следующим образом: #! / bin / bash cd / var / web / delicms_env / deli_cms / source ../bin/activate exec gunicorn --workers = 3 deli_cms.wsgi: приложение
user2868304

Теперь моя проблема решена, я использовал скрипт gunicorn_django, и он давал мне устаревшие сообщения. Я все еще не уверен, почему он работал локально, не изменил мой конфиг nginx, просто изменил старый скрипт, чтобы он использовал gunicorn и использовал вместо него модуль wsgi: application, и он снова работает. Gunicorn и раньше выкладывал несколько сообщений об устаревании, но ничего конкретного для моей проблемы.
user2868304

1

У меня есть похожая проблема, в моем случае она была вызвана наличием скрипта Commented внутри тега body.

<!--<script>  </script>-->

1

Я столкнулся с этим вопросом. Оказывается, я включил в шаблон, используяstatic тег шаблона, файл, который больше не существует. Просмотр журналов показал мне проблему.

Я думаю, что это только одна из многих возможных причин такого рода ошибок.

Мораль истории: всегда регистрируйте ошибки и всегда проверяйте журналы.


1

Благодаря @squarebear, в файле журнала я нашел ошибку: ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...> .

У меня было несколько проблем в моем приложении Django. Я убрал строку
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' которую нашел в документации к героку.

Мне также пришлось добавить дополнительный каталог (благодаря еще одному SO-ответу ) staticв корень приложения django, myapp/staticхотя я и не использовал его. Затем выполнение команды python manage.py collectstaticперед запуском сервера решило проблему. Наконец-то все заработало.


Как это отвечает на оригинальный вопрос?
Ник

1

Я начал получать 500 для отладки = False в виде

django.urls.exceptions.NoReverseMatch: Reverse for 'home' not found.
or...
django.urls.exceptions.NoReverseMatch: Reverse for 'about' not found.

при повышении django.core.exceptions.ValidationError вместо повышения rest_framework.serializers.ValidationError

Честно говоря, он уже поднимал 500, но как ошибка ValidationError с debug = False это изменилось на NoReverseMatch.


1

это может помочь кому-то еще, в моем случае проблема с отсутствующим значком.


0

Я знаю, что это старый вопрос, но я также получал ошибку 500, когда DEBUG = False. Через несколько часов я понял, что забыл завершить некоторые ссылки в моем base.html косой чертой.


даже CSS и JS вещи?
amchugh89

0

Это старая проблема, и моя проблема оказалась связанной с проблемой, но не с ОП, но мое решение для всех, кто попробовал вышеописанное безрезультатно.

У меня была настройка в модифицированной версии Django для минимизации файлов CSS и JS, которые запускались только при выключенном DEBUG. На моем сервере не был установлен минификатор CSS, и он выдал ошибку. Если вы используете Django-Mako-Plus, это может быть вашей проблемой.


0

Следует отметить одну небольшую вещь: если в массиве нет None, то все последующие разрешенные хосты игнорируются.

ALLOWED_HOSTS = [
    "localhost",
    None,
    'example.com', # First DNS alias (set up in the app)
    #'www.example.com', # Second DNS alias (set up in the app)
]

Django version 1.8.4


0

Немного опоздал на вечеринку, и, конечно, мог возникнуть целый ряд проблем, но у меня была похожая проблема, и оказалось, что у меня есть {%%} специальные символы внутри моего html-замечания ...

<!-- <img src="{% static "my_app/myexample.jpg" %}" alt="My image"/> -->

0

У меня было одно представление, которое выдавало ошибку 500 в debug = false, но работало в debug = true. Для тех, кто получает подобные вещи и с Allowed Hosts, это не проблема, я исправил свое мнение, обновив статический тег шаблона, который указывал на неправильное местоположение.

Так что я бы посоветовал просто проверять ссылки и теги в любых используемых шаблонах, возможно, некоторые вещи проскальзывают в сети при отладке, но приводят к ошибкам в работе.


0

Я обнаружил еще одну причину ошибки 500, когда DEBUG = False. Я использую Django compressorутилиты и наши интерфейсные инженер добавлены ссылки на файлы шрифтов внутри в compress cssблоке в шаблоне Django. Как это:

{% compress css %}
    <link href="{% static "css/bootstrap.css" %}" rel="stylesheet">
    <link href="{% static "css/bootstrap-spinedit.css" %}" rel="stylesheet">
    <link href="{% static "djangular/css/styles.css" %}" rel="stylesheet">
    <link href="{% static "fonts/fontawesome-webfont.ttf" %}" rel="stylesheet">
{% endcompress %}

Решением было переместить ссылку на ttfфайл ниже endcompressстроки.


0

У меня была проблема, похожая на эту, и я сообщу, как я решил мою, потому что может случиться так, что кто-то также испытывает то же самое.

В моем случае ошибка была вызвана тем, что сервер не обнаружил статические файлы с домашней страницы.

Поэтому убедитесь, что ошибка возникает только в indexили на другой странице. Если проблема возникает только в индексе, очень вероятно, что вам нужно проверить статические файлы. Я рекомендую открыть консоль предварительного просмотра Chrome и проверить наличие ошибок.

В моем случае сервер не смог найти favicon.ico и два других CSS.

Чтобы исправить это, я прошел, python manage.py collectstaticи это сработало.


0

Я знаю, что этот пост довольно старый, но он все еще актуален сегодня.

Для чего это стоит - я получал 500 с DEBUG = False для всех страниц на моем сайте.

Я не получил трассировку при отладке.

Я должен был пройти через все статические ссылки в моих шаблонах на моем сайте и найти одну / (прямая косая черта) перед моим источником изображения. {% static ...%}. Это вызвало ошибку 500, DEBUG = Falseно прекрасно работало Debug = Trueбез ошибок. Очень надоедливый! Имейте в виду! Много часов впустую из-за косой черты ...


0

Вы можете запустить python manage.py collectstaticпосле установки DEBUG = Falseи ALLOWED_HOSTS = ['127.0.0.1']вsettings.py . После этих двух шагов мое веб-приложение хорошо работало на моем локальном сервере даже в режиме DEBUG = False.

Кстати, у меня есть эти настройки в settings.py.

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', # what i added
    'django.middleware.common.CommonMiddleware', # and so on...
]

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Я предполагаю, что, возможно, настройка whitenoise как-то связана с командой collectstatic.


-3

Хорошо, после попытки многих вещей, правильное решение ...

вам нужно установить DEBUG = 'FALSE'не Falseили FALSE, но 'FALSE'с''


Я думаю, что «ЛОЖЬ» - это строка, поэтому она равна Истине, поэтому не выдает ошибку.
APET
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.