Встановлення DEBUG = False викликає 500 помилок


298

Як тільки я міняю DEBUG = False , мій сайт генерує 500 (за допомогою wsgi & Manag.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. Дякую, що вказали на це !!!
shreddd

4
Детальніше про проблеми безпеки, які запровадили цей параметр: Практичні атаки заголовка HTTP Host . Однозначно переконує вас не використовувати ['*']у виробництві.
gertvdijk

4
бл. дратує, що вони навіть не вкладають його як значення за замовчуванням у settings.py, можливо, із розширеним коментарем ...
hwjp

7
Іноді мені цікаво, чому Джанго стає все більш відсталим! Звичайно, ці хлопці набагато кращі програмісти, ніж я, але я дійсно не розумію рішення «виправити» вразливості на рівні програми, коли справжнім та чистим кроком було б правильно налаштувати сервер. Те саме стосується "кешування шаблонів" та "стійких з'єднань" ... Марний код, який ніколи не буде використовуватися на серйозному веб-сайті; все ще представлений як святий грааль програмування! Можливо, тільки я, я раніше помилявся!
StefanNch

3
Не забудьте, знайшли проблему. Це було пов'язано django-pipelineз поведінкою, коли статика ще не зібрана. Як загальна порада, розміщення точки перерви в handle_uncaught_exceptionметоді Джанго допоможе вам зрозуміти, що тут відбувається.
Пітер

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
Дійсно, це не те, що блукати в темряві. Просто подивіться на повідомлення про помилку, яке зазвичай бачите за допомогою цього методу. У моєму випадку мені не вистачало іншого параметра в налаштуваннях.py, який шукав мій додаток. Все, що мені було потрібно - це журнал, щоб відстежити це. Одне важливе зауваження: я додав / шлях / до / мого / django / перед "mysite.log", як показано в прикладі документів: docs.djangoproject.com/en/1.10/topics/logging/#examples
Роб

4
Я витратив години на пошуки рішення, ніякої користі. відповідно до цієї відповіді просто використовуйте журнал, і ви повинні мати свою проблему, це найкраща відповідь. Дякую ОП!
Стек

Моя помилка сервера, схоже, не створює журналів! Я спробував різні конфігурації реєстрації безрезультатно. Будь-які ідеї?
cammil

5
Дякую! Це вирішило мою помилку. Виявляється, мені потрібно було запустити collestatic, щоб зібрати деякі статичні активи з пакета.
тематика

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.


Я йду те саме, але collestatic не виправив це для мене. Ви отримали "помилку неможливо досягти"? У такому випадку, як ви це виправили?
Каві Вайдя

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 Nope. Жодної шкоди не зачіпає. django-compressor.readthedocs.io/en/latest/settings/… Компресор все одно би робив свою роботу ідеально! Просто стисніть усі ваші статики (наприклад, css), щоб налаштування таким чином було марним, оскільки ваші активи вже стиснуті
KhoPhi

13

Право, у Django 1.5 якщо DEBUG = Неправильно, налаштуйте ALLOWED_HOSTS, додавши домени без номера порту. приклад:

ALLOWED_HOSTS = ['localhost']

З будь-якої причини використання "localhost" не працювало для мене. Мені довелося замість цього використовувати IP '127.0.0.1'. Я також зміг використати "*", якщо ви бовтаєтесь і просто хочете, щоб він працював. Я б не радив робити це на виробництві. OSX під управлінням Django
1.4.20

11

Ви також повинні перевірити свої URL-адреси в усьому місці. Коли значення DEBUGвстановлено на False, всі URL-адреси без трейлінгу /трактуються як помилка, на відміну від DEBUG = Trueвипадків , коли у вас є , і в цьому випадку Django буде додаватися /скрізь, де його немає. Отже, коротко, переконайтесь, що всі посилання закінчуються косою рисою ВСЕ.


3
просто використовуйте тег зворотного та URL-адреси, і вам слід добре
maazza

установка DEBUG=Falseможе розкрити помилки імпорту , а також: stackoverflow.com/questions/25676453 / ...
ECOE

навіть посилання на js та css активи?
amchugh89

@ amchugh89: ні, просто "django" URL-адреси
webzy

1
Моя проблема полягає в тому, що білоїзу не вдалося знайти якесь зображення і кидає ValueError. Я також не міг його знайти, але не знав, як сказати бітоїзу, щоб не шукати. Тому я вимкнув біліонез, використовую статичну службу django, і тепер я можу запустити налагодження = False in prod. Очевидно не ідеально :(
amchugh89

7

У мене для всіх весела історія. Після переходу на цю сторінку я сказав: "Еврика! Я врятований. Це ОБОВ'ЯЗКОВО бути моєю проблемою. Тому я вставив потрібний ALLOWED_HOSTSсписок у setu.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.
nicorellius

1
що я люблю робити, це мати налаштування / каталог замість settings.py. У цьому каталозі ви можете мати окремі .py файли для різних середовищ та base.py для загальних налаштувань. Налаштування, залежні від виробництва, можуть починатися імпортом * з базових налаштувань і просто перекривати все, що їм потрібно, щоб змінити. Також необхідний init .py, необхідний для перетворення цих параметрів / каталогу у дійсний модуль, спочатку може імпортувати з 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%}. Я не помічав цього в іншому місці, тому що в інших шаблонах був цей рядок, але має сенс помістити його в базу так чи інакше, оскільки це стосується статичних файлів повсюди.
krischan

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

5

Я зіткнувся з тією ж проблемою, коли і я DEBUG = FALSE . Ось зведене рішення, розкидане у відповідях вище та інших публікаціях.

За замовчуванням у налаштуваннях.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-адресу 404handler, але я думаю, що це необов’язково. 404.html виправлено

в mainproject.urls

handler404 = 'app.views.custom_404'

в додатках

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

потім зробіть шаблон шаблону / 404.html

отримав це з іншої публікації S / O, що я не можу її знайти

EDIT

Крім того, я отримую 500 помилок, коли обслуговую активи з бітенозами. Я не міг зрозуміти, що за життя мене виникла помилка: ValueError від whitenoise не в змозі знайти актив, який я також не міг знайти, довелося зараз переходити на показ джанго за замовчуванням.


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.-сервер Manag.py в командному рядку, щоб побачити помилки, які не з’являться в будь-яких журналах помилок.


2

Її середина 2019 року, і я зіткнувся з цією помилкою після кількох років розвитку з Джанго. Збивали мене цілу ніч! Не було дозволено хосту (який повинен викинути 400), все інше перевірено, нарешті зробив деяку реєстрацію помилок лише для того, щоб виявити, що якісь відсутні / або заплутані статичні файли маніфесту (після collestatic) накручуються з налаштуванням. Коротка історія, для тих, хто наткнувся і НАСТОЛЬНО ВИКОРИСТОВУЄ ВІТЕНОЗА АБО СТАТИКФІЛЬ ДЖАНГО ЗАПАСНЯЄТЬСЯ КАШЕМ (явні статичні файли), можливо, це для вас.

  1. Переконайтеся, що ви все налаштували (як я це зробив для бекенда біттенозу ... Програми про джанго читайте все-таки) 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.

Ось мій файл конф для 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: application
user2868304

моя проблема зараз вирішена, я використовував сценарій gunicorn_django, і він давав мені застарілі повідомлення. Ще не впевнений, чому він працює локально, не змінив конфігурацію nginx, просто змінив старий скрипт, щоб використовувати gunicorn і використовувати замість цього модуль wsgi: application, і він знову працює. Гунікорн перед цим також кидав якісь повідомлення про зневіру, але нічого конкретного для моєї проблеми.
користувач2868304

1

У мене є аналогічна проблема, в моєму випадку вона була викликана наявністю коментованого сценарію всередині тегу body.

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

1

Я зіткнувся з цим питанням. Виявляється, я включав у шаблон, використовуючиstatic тег шаблону, файл, який вже не існував. Погляд у колоди показав мені проблему.

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

Мораль історії: завжди записуйте помилки та завжди перевіряйте журнали.


1

Завдяки @squarebear у файлі журналу я знайшов помилку: ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...> .

У мене було кілька проблем у додатку джанго. Я видалив лінію
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' який я знайшов із документації на heroku.

Я також повинен був додати додатковий каталог (завдяки іншій відповіді ТА ) 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, з налагодженням = 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 у відладці = false, але працював у відладці = true. Для тих, хто отримує подібні речі та дозволені хости - це не проблема, я виправив свій погляд, оновивши статичний тег шаблону, який вказував на неправильне розташування.

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


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усіх сторінок на своєму сайті.

У мене не було слідів зворотного зв'язку.

Мені довелося пройти кожне статичне посилання в моїх шаблонах на моєму веб-сайті і знайти одне / (перекидання вперед) перед джерелом зображення. {% статичний ...%}. Це спричинило помилку 500, DEBUG = Falseале спрацювало чудово, Debug = Trueбез помилок. Дуже дратує! Будьте попереджені! Багато годин витрачалося витрачено через нахил вперед ...


0

Ви можете запустити python manage.py collectstaticпісля встановлення DEBUG = Falseта ALLOWED_HOSTS = ['127.0.0.1']входу settings.py. Після цих двох кроків мій веб-додаток добре працював на моєму локальному сервері навіть у DEBUG = False mode.

BTW У мене ці налаштування 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'

Я припускаю, що, можливо, налаштування бітнойзу мають щось спільне з колекційною командою.


-3

Добре, спробувавши багато справ, правильне рішення - це ...

вам потрібно встановити DEBUG = 'FALSE'не Falseабо FALSE, а за 'FALSE'допомогою''


Я думаю, що "FALSE" - це рядок, тому він дорівнює True, тому він не отримує помилки.
apet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.