DEBUG ayarı = Yanlış neden 500 Hatası


298

Ben değiştirdiğinizde DEBUG = False, sitem 500 (WSGI & manage.py runserver kullanarak) üretecektir ve Apache hata günlüğünde hiçbir hata bilgisi yoktur ve ben değiştirdiğinizde normalde çalışacak debugiçin True.

Django 1.5 ve Python 2.7.3 kullanıyorum burada Apache erişim günlüğü ve apache hata günlüğüne herhangi bir giriş olmadan

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"

İşte ayarlarım dosya:

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',
)

Evet, 403 ve 404 500 html dosyasını şablonlara
ekledim

500.html ve 404.html ve 403.html dosyalarınız var mı? Ben şablonları dizinin kökünde bu dosyaları yoktu konuşlandırılmış bir proje ile ilgili bir sorun olduğunu hatırlıyorum düşünüyorum.
esse

Siteniz 500 hatası oluşturuyorsa, apache günlüğünde bazı bilgiler olması gerekiyorsa, kullanıcıların bakması için hata günlüğü dosyasının sonunun bir bölümünü geçmiş olarak kullanmak isteyebilirsiniz.
esse

87
SECRET_KEY'inizi artık herkesin kullanımına açık olarak değiştirmek isteyebilirsiniz ...
Fraxtil

1
Bu herkesin cevabı değil. Stackoverflow.com/a/37218484/4028977'de aşağıda gösterildiği gibi , bunun olmasının birçok nedeni olabilir. Bazı basit günlük kaydı ile tahmin yapmadan öğrenebilirsiniz.
Rob

Yanıtlar:


413

Django 1.5 , güvenlik nedeniyle gerekli olan izin verilen ana makineler ayarını tanıttı . Django 1.5 ile oluşturulan bir ayar dosyası eklemeniz gereken bu yeni bölüme sahiptir:

# 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 = []

Ana makinenizi hızlı bir test için ['www.beta800.net']veya buraya ekleyin ['*'], ancak ['*']üretim için kullanmayın .


32
Vay canına - bu bizi biraz zorladı. Bu ayarın dokümanlara gömülmesi gerçekten berbat. Üretim tesisimiz DEBUG = False ile çalışmaz. Bunu işaret ettiğiniz için teşekkür ederiz !!!
shreddd

4
Bu ayarı getiren güvenlik sorunları hakkında daha fazla bilgi: Pratik HTTP Ana bilgisayar üstbilgisi saldırıları . ['*']Üretimde kullanılmama konusunda sizi kesinlikle ikna edecektir .
gertvdijk

4
bl. ayarlayıcıda varsayılan bir değer olarak bile yapışmadıklarını sataşmak, belki de kapsamlı bir yorumla ...
hwjp

7
Bazen merak ediyorum Django neden giderek daha fazla gecikiyor! Suriyeliler bu adamlar benden çok daha iyi programcılar, ama gerçek ve temiz hareket sunucuyu düzgün bir şekilde yapılandırmak olduğunda, güvenlik açıklarını uygulama düzeyinde "düzeltme" kararını gerçekten anlamıyorum. Aynı şey "şablon önbelleğe alma" ve "kalıcı bağlantılar" için de geçerlidir ... Ciddi bir web sitesinde asla kullanılmayacak işe yaramaz kod; hala programlama kutsal kâse olarak sunulmaktadır! Belki de sadece benim, daha önce yanılmışım!
StefanNch

3
Boşver, sorunu buldu. django-pipelineStatik henüz toplanmadığında davranışı ile ilgiliydi . Genel bir ipucu olarak, Django'nun handle_uncaught_exceptionyöntemine bir kesme noktası yerleştirmek , burada neler olduğunu anlamanıza yardımcı olacaktır.
Pieter

51

Bu geç olduğunu biliyorum ama burada benim hata 500 ile bir arama ile sona erdi DEBUG=False, benim durumumda olduğu ortaya çıktı ALLOWED_HOSTSama os.environ.get('variable')ana bilgisayarları doldurmak için kullanıyordum , ben günlüğü etkinleştirene kadar bunu fark etmedim tüm hataları aşağıdaki dosyaya günlüğe kaydeder ve şu durumlarda bile günlüğe kaydedilir 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
Bu kabul edilen cevap olmalı. Tahmin etmeye çalışmak yerine, üretim ayarlarını kullandıktan sonra çerçevenin kendisine neyin yanlış olduğunu sormak çok daha yararlıdır.
Stefan Dragnev

4
Aslında, bu karanlıkta dolaşmak için bir şey değil. Bu yöntemi kullanarak normalde gördüğünüz hata mesajına bakın. Benim durumumda, ayarlarımda uygulamamın aradığı farklı bir ayar eksikti. İhtiyacım olan tek şey bunu takip etmek için kütüktü. Önemli bir not: Dokümanlar örneğinde gösterildiği gibi 'sitem.log'dan önce / path / dizinine / django / öğesini ekledim: docs.djangoproject.com/en/1.10/topics/logging/#examples
Rob

4
Çözüm aramak için saatler harcadım, faydası yok. bu cevaba göre sadece günlüğü kullanın ve sorununuzu olmalı, bu en iyi cevap. Teşekkürler OP!
Yığın

Sunucu hatalarım günlük üretmiyor gibi görünüyor! Boşuna çeşitli günlük yapılandırmalarını denedim. Herhangi bir fikir?
cammil

5
Teşekkür ederim! Bu benim hatamı çözdü. Bir paketteki bazı statik varlıkları toplamak için collectstatic çalıştırmam gerektiği ortaya çıktı.
themessup

34

Aynı sorunla Django 2.0'da da karşılaştım. Sorunu ayarlayarak anlayabildim DEBUG_PROPAGATE_EXCEPTIONS = True. Buraya bakın: https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions

Benim durumumda, hata oldu ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'. Yerel olarak çalışarak bunu düzelttim python manage.py collectstatic.


Aynı şeylere gidiyorum ama koleksiyoncu benim için düzeltmedi. "Ulaşılamıyor hatası" aldınız mı? Bu durumda, nasıl düzelttiniz?
Kavi Vaidya

23

Benim durumumda, üçüncü taraf uygulamalarının dokümanlarını okumak beni düzgün bir şekilde kurtardı.

Suçlu? Django_compressor'un

sahiptim

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

DEBUG = True her zaman bana 500 verdi. Düzeltmek için, ayarlarımın çalışmasını sağlamak için bir satıra ihtiyacım vardı

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

Benim için işe yaramadığı için teşekkürler, ama bu çizgi django_compressor'un işini yapmasını engellemiyor mu?
Fanckush

1
@Fanckush Nope. Hiçbir zararı yoktur. django-compressor.readthedocs.io/en/latest/settings/… Kompresör hala mükemmel bir iş çıkarıyor! Tüm statiklerinizi (css gibi) sıkıştırın, böylece varlıklarınız zaten sıkıştırılmış olduğundan ayar işe yaramaz
KhoPhi

13

Django 1.5'te DEBUG = False ise, bağlantı noktası numarası olmadan alan adları ekleyerek ALLOWED_HOSTS yapılandırın. misal:

ALLOWED_HOSTS = ['localhost']

Her ne sebeple olursa olsun, 'localhost' kullanmak benim için işe yaramadı. Bunun yerine '127.0.0.1' IP'sini kullanmak zorunda kaldım. Eğer korkuyorsanız ve sadece çalışmasını istiyorsanız '*' özelliğini de kullanabildim. Ancak bunu üretimde yapmayı tavsiye etmem. OSX çalışan Django
1.4.20

11

URL'lerinizi her yerde kontrol etmeniz gerekir. Olarak DEBUGayarlandığında False, izleme içermeyen tüm URL'ler /, sahip olduğunuzdan farklı olarak bir hata olarak değerlendirilir; DEBUG = Truebu durumda Django /, eksik olduğu her yere ekler . Kısacası, tüm bağlantıların HER YERDE bir eğik çizgi ile sonlandığından emin olun.


3
sadece ters ve url etiketini kullanın ve iyi olmalısınız
maazza

ayarı DEBUG=Falseiçe aktarma hatalarını da açığa çıkarabilir: stackoverflow.com/questions/25676453/…
ecoe

js ve css varlıklarına bile bağlantılar?
amchugh89

@ amchugh89: hayır, sadece "django" URL'leri
webzy

1
Benim sorunum, whitenoise bazı görüntü bulamadı ve ValueError atıyor. Ben de bulamadım, ama beyaz cevaba bakmamayı nasıl söyleyeceğimi bilmiyordum. Bu yüzden beyazlığı kapadım, django statik servisini kullandım ve şimdi debug = Fald'ı prod'da çalıştırabilirim. Açıkçası ideal değil :(
amchugh89

7

Herkes için komik bir hikayem var. Bu sayfaya ulaştıktan sonra "Eureka! Kurtarıldım. Bu benim sorunum OLMALIDIR" dedim. Bu yüzden ALLOWED_HOSTSsetting.py ve ... hiçbir şeye gerekli listeyi ekledim. Aynı eski 500 hatası. Ve hayır, 404.html dosyasının olmaması nedeniyle değildi.

2 gün boyunca kendimi vahşi teorilerle meşgul ettim, örneğin statik dosyalar sunmakla ilgisi vardı (bir noob olduğumu ve noobs'un ne yaptıklarını bilmediğini anlayın).

Öyleyse neydi? Şimdi yararlı bir ipucu geldi Sayın Moderatör. Gelişimim Django 1.5.something ise, üretim sunucu versiyonum 1.5.something + 1 ... ya da belki plus 2. Her neyse. Ve böylece hwjp ne istediğini settings.pyALLOWED_HOSTS masaüstü sürümüne ekledikten sonra --- "açıklayıcı bir yorum ile ayarlar.py varsayılan değeri" --- aynı şeyi üretim sunucusunda yaptım bunun için uygun alan adı.

Ancak, Django'nun sonraki sürümüne sahip üretim sunucusunda, açıklayıcı bir yorum ile settings.py'de varsayılan bir değer olduğunu fark edemedim. Monitörde göremediğim, girişimi yaptığımın çok altındaydı. Ve tabii ki liste boştu. Bu yüzden zaman kaybım.


1
Ben sadece aynı komik desen vardı!, sadece bunu bulduktan sonra komik oldu, teşekkürler. ondan önce sadece düz sinir bozucu oldu
binithb

Tüm bunlara yardımcı olan bir şey, local_settings.pyher ortam için bir kullanmak ve daha sonra içeri aktarmaktır settings.py.
nicorellius

1
ne yapmak istiyorum, settings.py yerine bir ayarlar / dizin var . Bu dizinde, farklı ortamlar için ayrı .py dosyalarınız ve genel ayarlar için bir base.py dosyanız olabilir. Üretime bağlı ayarlar daha sonra temel ayarlardan * içe aktarılarak başlayabilir ve sadece geçersiz kılmak için gerekenleri geçersiz kılar. Ayrıca, bu ayarları / dizini geçerli bir modüle dönüştürmek için gereken gerekli init .py dosyası, önce base.py'dan içe aktarılabilir ve sonra bir local.py'dan (yalnızca yerel olarak var olan) içe aktarmayı deneyebilir. Bu, yerel ayarları manuel olarak belirtmeniz gerekmediği anlamına gelir
mephisto

7

Ana cevabı tamamlama Geliştirme ve üretim arasında geçiş yaparken
ALLOWED_HOSTS ve DEBUG küresel sabitlerini değiştirmek can sıkıcı bir durum settings.py. Bu ayarı otomatik olarak ayarlamak için bu kodu kullanıyorum:

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 kullanıyorsanız daha genel bir kod yazabilirsiniz:

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

6

Değer için - DEBUG = Falsesadece bazı sayfalarda 500 ile alıyordum . Pdb ile istisna izlendiğinde eksik bir varlık ortaya çıktı ( {% static ... %}Şablon etiketinin 500 için suçlu olduğundan şüpheleniyorum .


1
Bu da benim sorunumdu, özel 404 sayfasının referans aldığı temel şablon statik etiketi kullandı ancak üstteki {% load static%} öğesini içermedi. Başka bir yerde fark etmedim çünkü diğer şablonlarımın bu satırı vardı, ancak her yerde statik dosyalara atıfta bulunduğundan üsse koymak mantıklı.
krischan

2
Burada da aynı çözüm - staticVarolmayan bir CSS dosyası eklemek için kullanıyordum .
Phil Gyford

5

Ben de aynı problemle karşılaştım DEBUG = FALSE. Yukarıdaki yanıtlarda ve diğer gönderilerde dağınık olduğu gibi birleştirilmiş bir çözüm.

Varsayılan olarak, settings.py'de var ALLOWED_HOSTS = []. ALLOWED_HOSTSHatayı ortadan kaldırmak için senaryoya göre değer vermeniz gereken olası değişiklikler şunlardır :

1: Alan adınız:

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

2: Henüz etki alanı adınız yoksa dağıtılan sunucu IP'niz (bu benim durumumdu ve bir cazibe gibi çalıştı):

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

3: Yerel sunucuda test ediyoruz ederseniz, düzenleyebilir settings.pyveya settings_local.pygibidir:

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

4: Ayrıca ALLOWED_HOSTSdeğere '*' da sağlayabilirsiniz, ancak güvenlik nedeniyle üretim ortamında önerilmemektedir :

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

Ben de detaylı bir çözüm attılar bloga sen başvurmak isteyebilirsiniz.


5

ALLOWED_HOSTS tek sorun değil, benim için bir 404.html yapmak ve şablonlarımın temel seviyesine koymak zorunda kaldım (uygulama düzeyinde değil) - Ayrıca, 404 görünüm yapabilir ve 404handler url ekleyebilirsiniz. isteğe bağlı. 404.html düzeltildi

mainproject.urls içinde

handler404 = 'app.views.custom_404'

app.views içinde

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

ardından bir şablon / 404.html şablonu oluşturun

bulamadığım başka bir S / O gönderisinden aldım

DÜZENLE

ayrıca, beyazlatmalı varlıklara hizmet ettiğimde 500 hata alıyorum. Benim hayatım boyunca hata, whitenoise'den de bulamadığım bir varlık bulamayan ValueError, şu an için varsayılan django sunumu ile gitmek zorunda olduğunu anlayamadım


8
Beyaz benimle aynı problemi yaşadım. python manage.py collectstaticonu düzeltti.
Eugene Pakhomov

1
@ amchungh89 hayat kurtarıcısın! Bunu işaret ettiğin için teşekkürler.
Deepak Sharma

5

Bu sorun hakkında daha fazla arama yapıyordum ve test ediyordum ve settings.py'de belirtilen statik dosya dizinlerinin bunun bir nedeni olabileceğini fark ettim, bu yüzden yumruk, bu komutu çalıştırmamız gerekiyor

python manage.py collectstatic

settings.py dosyasında kod şöyle görünmelidir:

STATIC_URL = '/static/'

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

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

3

Bunun çok eski bir soru olduğunu biliyorum, ama belki başka birine yardım edebilirim. DEBUG = False ayarını yaptıktan sonra 500 hatası alıyorsanız, herhangi bir web hata günlüğünde görünmeyecek hataları görmek için her zaman komut satırında manage.py runserver komutunu çalıştırabilirsiniz.


2

2019'un ortası ve Django ile birkaç yıl geliştirdikten sonra bu hatayla karşılaştım. Bütün gece beni şaşırttı! Ana makineye (400'ü atması gerekir) izin verilmedi, her şey kontrol edildi, sonunda bazı eksik / veya dağınık statik dosyaların (collectstatic'ten sonra) kurulumla vidalandığını keşfetmek için bazı hata günlüğü yaptı. Uzun lafın kısası, güdük olanlar ve BÖYLE MUTLULUĞU WHITENOISE VEYA CANGE İLE DJANGO STATİK DOSYA ARKA PLANI (statik dosyaları göster) kullanır, belki bu sizin içindir.

  1. Her şeyi ayarladığınızdan emin olun (beyazlatıcı arka uç için yaptığım gibi ... django arka uçları yine de okunur) http://whitenoise.evans.io/en/stable/django.html

  2. Hata kodu 500 sizi hala vuruyorsa, ayarlarınızı not edin.STATICFILES_STORAGE.

İkisinden birini ayarlayın (sıkıştırma ile beyazren arka ucu için)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

veya (django varsayılanı olarak bırak)

STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage

Sonuçta, SORUN bu beyaz önbellek + sıkıştırma arka ucunun ->

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

veya django'nun kendi önbelleğe alma arka ucu ->

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

... benim css collectstatic / arka uç önbellekleme sırasında karıştırılmış olabilir bazı kaynaklara başvuruyordu çünkü benim için oldukça işe yaramadı. Bu sorun ayrıca http://whitenoise.evans.io/en/stable/django.html#storage-tro giderme bölümünde de vurgulanmaktadır.


1

Ben de http sunucu ayarları olabileceğini düşünüyorum. Benimki hala kırık ve süre boyunca ALLOWED_HOSTS vardı. Yerel olarak erişebilirim (gunicorn kullanıyorum), ancak DEBUG = False olduğunda alan adı ile değil. Etki alanı adını kullanmayı denediğimde bana hata veriyor, bu yüzden nginx ile ilgili bir sorun olduğunu düşündürüyor.

İşte nginx için benim conf dosya:

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 config dosyam aşağıdaki gibidir: #! / bin / bash cd / var / web / delicms_env / deli_cms / source ../bin/activate exec gunicorn --workers = 3 deli_cms.wsgi: uygulama
user2868304

şimdi sorunum çözüldü, gunicorn_django betiğini kullanıyordum ve bana itiraz edilen mesajlar veriyordu. Hala neden yerel olarak çalıştığından emin değilim, nginx yapılandırmamı değiştirmedim, eski betiği gunicorn kullanmak ve wsgi: uygulama modülünü kullanmak için değiştirdi ve tekrar çalışıyor. Gunicorn bundan önce de bazı itiraz mesajları veriyordu ama benim sorunuma özgü bir şey yoktu.
user2868304

1

Ben benzer bir sorun var, benim durumumda vücut etiketi içinde bir Yorum komut dosyası olması neden oldu.

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

1

Bu sorunla karşılaştım. Görünüşe göre static, artık mevcut olmayan bir dosyayı , şablon etiketini kullanarak ekledim. Günlüklere bir bakış bana sorunu gösterdi.

Sanırım bu, bu tür bir hatanın birçok olası nedeninden sadece biri.

Hikayenin ahlaki: her zaman hataları günlüğe kaydet ve her zaman günlükleri kontrol et.


1

Teşekkür günlük dosyasında, ben hata buldum, @squarebear için: ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...>.

Django uygulamamda birkaç sorun yaşadım.
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'Bulduğum hattı heroku'nun belgelerinden kaldırdım.

Ben de (sayesinde ekstra dizini eklemek zorunda başka SO cevap ) staticolarak Django uygulamanın kök myapp/staticbunu kullanmıyor olsa bile. Sonra python manage.py collectstaticsunucuyu çalıştırmadan önce komutu çalıştırmak sorunu çözdü. Sonunda, iyi çalışmaya başladı.


Bu asıl soruya nasıl cevap veriyor?
Nick

1

Hata ayıklama için 500 = False şeklinde almaya başladım

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

yükselterek zaman django.core.exceptions.ValidationError yerine yetiştirme rest_framework.serializers.ValidationError

Adil olmak gerekirse, daha önce 500'ü yükseltiyordu, ancak bir ValidationError olarak, debug = False ile bu NoReverseMatch olarak değişti.


1

bu belki başka birine yardım, benim durumumda eksik favicon ile ilgili sorun.


0

Bunun eski bir soru olduğunu biliyorum, ama DEBUG = False olduğunda da 500 hatası alıyordum. Birkaç saat sonra, base.html dosyasındaki bazı bağlantıları sondaki eğik çizgi ile sonlandırmayı unuttuğumu fark ettim.


css ve js şeyler bile?
amchugh89

0

Bu eski ve benim sorunum sorun ile ilgili ama OP için sona erdi ama benim çözüm yukarıdaki boşuna deneyen herkes içindir.

Django'nun değiştirilmiş bir sürümünde, yalnızca DEBUG kapalıyken çalıştırılan CSS ve JS dosyalarını küçültmek için bir ayar vardı. Sunucumda CSS minifier yüklü değildi ve hatayı attı. Django-Mako-Plus kullanıyorsanız, bu sizin sorununuz olabilir.


0

Dikkat edilmesi gereken küçük bir şey, Dizinin içinde Hiçbiri yoksa, sonraki tüm izin verilen ana bilgisayarlar yoksayılır.

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

Partiye biraz geç ve tabii ki bir takım lejyonlar olabilir ama benzer bir sorunum vardı ve html notumun içinde {%%} özel karakterlerin olduğu ortaya çıktı ...

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

0

Hata ayıklama = yanlış 500 hata attı ama hata ayıklama = true çalışan bir görünüm vardı. Herkes bu tür bir şey alıyor ve İzin Verilen Hosts için sorun değil, yanlış yere işaret bir şablonun statik etiket güncelleyerek benim görüş sabit.

Bu yüzden, kullanılan herhangi bir şablonda sadece bağlantıların ve etiketlerin hava geçirmez olup olmadığını kontrol etmenizi öneririm, belki bazı şeyler hata ayıklamada net üzerinden kayar ancak üretimde hatalar verir.


0

DEBUG = False olduğunda 500 hatasının başka bir nedenini buldum. Django compressoryardımcı programını kullanıyorum ve ön uç mühendisimiz Django şablonundaki bir blok içindeki font dosyalarına referanslar ekledi compress css. Bunun gibi:

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

Çözüm, bağlantıyı satırın ttfaltındaki dosyaya taşımaktı endcompress.


0

Buna benzer bir sorunum vardı ve benimkini nasıl çözdüğümü rapor edeceğim çünkü biri de aynı şeyi yaşıyor olabilir.

Benim durumumda, sunucu ana sayfadan bazı statik dosyalar bulamadığı için hata oluştu.

Bu nedenle hatanın yalnızca indexbaşka bir sayfada veya olduğundan emin olun . Sorun sadece dizinde oluşuyorsa, büyük olasılıkla statik dosyaları kontrol etmeniz gerekir. Chrome önizleme konsolunu açmanızı ve hata olup olmadığını kontrol etmenizi öneririz.

Benim durumumda, sunucu favicon.icove diğer iki CSS bulamadı .

Bunu düzeltmek için geçtim python manage.py collectstaticve işe yaradı.


0

Bu yazının oldukça eski olduğunu biliyorum ama bugün hala mükemmel bir şekilde alakalı.

Değer için - DEBUG = Falsesitemdeki tüm sayfalar için 500 ile alıyordum .

Hata ayıklandığında hiçbir izim yok.

Sitemdeki şablonlardaki her statik bağlantıdan geçmek zorunda kaldım ve görüntü kaynağımın önünde bir / (eğik çizgi) buldum. {% statik ... %}. Bu 500 hataya neden oldu, DEBUG = Falseancak hatasız mükemmel çalıştı Debug = True. Çok sinir bozucu! Dikkatli olun! Eğik çizgi nedeniyle uzun saatler boşa harcanıyor ...


0

Sen çalıştırmak isteyebilirsiniz python manage.py collectstaticayarladığınız sonra DEBUG = Falseve ALLOWED_HOSTS = ['127.0.0.1']de settings.py. Bu iki adımdan sonra web uygulamam DEBUG = Yanlış modda bile yerel sunucumda iyi çalıştı.

BTW Bu ayarlara sahibim 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'

Belki beyazlatma ayarının collectstatic komutu ile ilgisi olduğunu varsayalım.


-3

Pek çok şeyi denedikten sonra doğru çözüm ...

ayarlamak gerek DEBUG = 'FALSE'yok Falseya FALSE, ama 'FALSE'birlikte''


Bence 'FALSE' bir dize, bu yüzden True'ya eşit, bu yüzden bir hata almıyor.
apet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.