web-dev-qa-db-ja.com

DEBUG = Falseに設定すると500エラーが発生する

DEBUG = Falseを変更すると、私のサイトは500を生成し(wsgi&manage.py runserverを使用)、Apacheエラーログにエラー情報がなくなり、debugTrueに変更しても正常に実行されます。

私は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', '[email protected]'),
)

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',
)
284
zhiguo.wang

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']['*']のようにここにホストを追加します が、プロダクションに['*']を使用しないでください

408
Ric

私はこれが遅いことを知っていますが、ここでDEBUG=Falseでエラー500を検索しました。私の場合は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',
        },
    }
}
41
0x7c0

私の場合は、サードパーティ製のアプリのドキュメントを読むことで、私を正しく救いました。

原因は? Django_compressor

私は持っていた

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

DEBUG = Trueはいつも私に500をくれました。

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

つい最近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を実行することでそれを修正しました。

15
Kyle Gibson

そうです、Django 1.5ではDEBUG = FalseならALLOWED_HOSTSを設定し、ポート番号なしでドメインを追加します。例:

ALLOWED_HOSTS = ['localhost']
13
tonyprr

あなたはまた、至る所であなたのURLをチェックしなければなりません。 DEBUGFalseに設定されていると、/が付いている場合とは異なり、末尾のDEBUG = Trueを含まないすべてのURLがバグとして扱われます。その場合、Djangoは/を追加します。したがって、手短に言うと、すべてのリンクが必ずスラッシュで終わっていることを確認してください。

10
webzy

私は皆のために陽気な話をしています。このページにたどり着いた後、私は "Eureka!私は救われました。それは私の問題であるはずです。"と言いました。だから私はsetting.pyに必要なALLOWED_HOSTSリストを挿入しましたが...何もしません。同じ古い500エラー。いいえ、404.htmlファイルが不足しているわけではありません。

それで、2日間、私は野生の理論で忙しくしました。例えば、静的ファイルを提供することと関係があるということです。

それでそれは何でしたか?私たちが役に立つヒントを得たのは今モデレーター氏です。私の開発Djangoはバージョン1.5.somethingですが、私の本番サーバーのバージョンは1.5.something + 1 ...または+ 2です。そのため、デスクトップ版のsettings.pyALLOWED_HOSTSを追加した後、hwjpが要求したものが欠けていました--- settings.pyの "デフォルト値"おそらく、説明的なコメントを付けて "---私は本番サーバーでも適切なドメインを使って同じことをしました。

しかし、私はDjangoのより新しいバージョンのプロダクションサーバーでは説明付きのsettings.pyにデフォルト値があったことに気づかなかった。それは私が私のエントリーをした場所のかなり下で、モニター上では見えなかった。そしてもちろん、リストは空でした。それ故に私の時間の無駄。

7
Mike O'Connor

それが価値があるもののために - 私はいくつかのページだけでDEBUG = Falseで500を得ていました。 pdbを使用して例外をトレースバックすると、アセットが不足していることが判明しました({% static ... %}テンプレートタグが500の原因であると思われます。

6
user316054

主な答えを補完する
開発と本番を切り替えるときにsettings.pyのALLOWED_HOSTSおよびDEBUGグローバル定数を変更するのは面倒です。これらの設定を自動的に設定するためにこのコードを使用しています。

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:
    ...
5
ePi272314

私は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ビューを作成して404handler URLを追加できます。オプションです。 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投稿からこれを得ました

EDIT

また、ホワイトホワイトでアセットを提供すると、500エラーが発生します。私の一生のためにそれを把握することができませんでした、エラーはwhitenoiseからValueErrorされた私はまた見つけることができなかった資産を見つけることができなかった、今のところデフォルトのDjangoサービングをして

4
amchugh89

私はこの問題についてもっと調べてテストしていましたが、settings.pyで指定されている静的ファイルディレクトリがこの原因である可能性があることに気付きました。

python manage.py collecstatic

settings.pyでは、コードは次のようになります。

STATIC_URL = '/static/'

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

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

私はこれが非常に古い質問であることを知っています、しかし多分私は他の誰かを手伝うことができました。 DEBUG = Falseに設定した後に500エラーが発生した場合は、いつでもコマンドラインでmanage.py runserverを実行して、Webエラーログに表示されないエラーを確認できます。

2
n0grip

ログファイルで@squarebearのおかげで、エラーが見つかりました:ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...>

Djangoアプリにいくつか問題がありました。回線を削除しました
私が英雄のドキュメンテーションから見つけた STATICFILES_STORAGE = 'whitenoise.Django.GzipManifestStaticFilesStorage'

私は追加のディレクトリを追加する必要がありました( 別のSO answer のおかげで)myapp/staticとしてDjangoアプリケーションのルートにstatic使用していませんでした。その後、サーバーを実行する前にコマンドpython manage.py collectstaticを実行すると問題が解決しました。ついに、それはうまく働き始めました。

1
kHarshit

私はそれがhttpサーバの設定である可能性もあると思います。私の物はまだ壊れていて、ずっとALLOWED_HOSTSでした。私はローカルにアクセスすることができます(私はgunicornを使用します)が、DEBUG = Falseの場合はドメイン名経由ではアクセスできません。ドメイン名を使用しようとするとエラーが発生するので、nginx関連の問題と考えさせます。

これがnginx用の私のconfファイルです。

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;
}
1
user2868304

私はこの問題に遭遇しました。 staticテンプレートタグを使用してテンプレートに含めたことが判明しました。これはもう存在しないファイルです。ログを見ると私に問題があることがわかりました。

これは、この種のエラーの多くの原因の1つにすぎないと思います。

物語の教訓:常にエラーをログに記録し、常にログをチェックします。

1
niagr

Debug = Falseの形式で500を取得し始めました

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
DZet

私の場合はbodyタグの中にコメント付きのスクリプトがあることが原因でした。

<!--<script>  </script>-->
1
Edison Urquijo

注意すべきことが1つあります。アレイに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
Ayush Goel

私はこれに似た問題を抱えていましたが、誰かが同じことを経験している可能性があるため、私がどのように解決したかを報告します。

私の場合、サーバーがホームページから静的ファイルを見つけられなかったため、エラーが発生しました。

したがって、エラーがindexでのみ発生するか、別のページで発生することを確認してください。問題がインデックスでのみ発生している場合は、おそらく静的ファイルを確認する必要があります。 Chromeプレビューコンソールを開いて、エラーをチェックすることをお勧めします。

私の場合、サーバーはfavicon.icoと他の2つのcssが見つかりませんでした。

これを修正することで、python manage.py collecstaticを提供し、問題を修正しました。

0
Alison Andrade

DEBUG = Falseの場合、500エラーの原因がもう1つ見つかった。私はDjangoのcompressorユーティリティを使い、私たちのフロントエンドエンジニアはフォントファイルへの参照を追加しましたinsideDjangoテンプレートのcompress cssブロック。このような:

{% 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
nmgeek

パーティーには少々時間がかかりますし、当然のことながらたくさんの問題があるかもしれませんが、私は同様の問題を抱えていました。

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

これは古い質問ですが、DEBUG = Falseの場合にも500エラーが発生していました。数時間後、私はbase.htmlのリンクを末尾のスラッシュで終わらせるのを忘れていたことに気づきました。

0
SethB

私はdebug = falseで500エラーを投げましたがdebug = trueで動作するという見方をしました。このようなことをしている人やAllowed Hostsが問題ではない人のために、間違った場所を指しているテンプレートの静的タグを更新することによって私の見解を修正しました。

だから私はリンクとタグが使用されているどんなテンプレートでも気密であることをチェックすることをお勧めします。

0
Tom

その2019年半ばと私は、Djangoで数年間開発してきたこのエラーに直面しました。私は一晩中困惑した! Host(400をスローします)は許可されていませんでした。他のすべてはチェックアウトしましたが、最後にエラーログを取って静的ファイルの欠落や乱雑さを明らかにしました。つまらない人やSO HAPPENがWHITENOISEを使用しているOR Django STATICFILE BACKEND WITH CACHE(明示的な静的ファイル)を使用している人にとっては、これはあなたのためかもしれません。

  1. あなたがすべてを設定していることを確認してください(私がホワイトバックエンドのためにやったように...それでも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はcollectstatic /バックエンドのキャッシュ中に混同されるかもしれない他のいくつかのソースを参照していたので、私にとってはあまりうまくいきませんでした。この問題は潜在的に http://whitenoise.evans.io/en/stable/Django.html#storage-troubleshoot でも強調されています。

0
aaronlhe

これは古く、私の問題はその問題に関連していたがOPには関係していなかったが、私の解決策は上記を試してみた他の誰にも役に立たなかった。

変更されたバージョンのDjangoでは、DEBUGがオフのときにのみ実行されるCSSとJSファイルを縮小する設定をしました。私のサーバーにはCSSミニファイアがインストールされておらず、エラーを投げました。 Django-Mako-Plusを使っているなら、これがあなたの問題かもしれません。

0
Spartacus