Pengaturan DEBUG = Salah menyebabkan 500 Kesalahan

298

Setelah saya mengubah DEBUG = False, situs saya akan menghasilkan 500 (menggunakan wsgi & manage.py runserver), dan tidak ada info kesalahan di log kesalahan Apache dan itu akan berjalan secara normal ketika saya mengubah debugke True.

Saya menggunakan Django 1.5 & Python 2.7.3 di sini adalah log akses Apache dan tanpa log in log apache error

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"

Ini file pengaturan saya:

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',
)
zhiguo.wang
sumber
Ya, saya telah menambahkan 403 & 404 500 file html di dir templat saya
zhiguo.wang
Apakah Anda memiliki file 500.html dan 404.html dan 403.html? Saya pikir saya ingat memiliki masalah dengan proyek yang dikerahkan yang tidak memiliki file-file itu di root direktori templat saya.
esse
Jika situs Anda menghasilkan kesalahan 500 maka harus ada beberapa info di log apache, Anda mungkin ingin melewati potongan dari akhir file log kesalahan untuk dilihat orang.
esse
87
Anda mungkin ingin mengubah SECRET_KEY Anda sekarang karena tersedia untuk umum ...
Fraxtil
1
Ini bukan jawaban untuk semua orang. Seperti yang ditunjukkan di bawah ini di stackoverflow.com/a/37218484/4028977 , mungkin ada banyak alasan mengapa ini terjadi. Dengan beberapa pencatatan sederhana Anda dapat mengetahuinya tanpa menebak.
Rob

Jawaban:

413

Django 1.5 memperkenalkan pengaturan host yang diizinkan yang diperlukan untuk alasan keamanan. File pengaturan yang dibuat dengan Django 1.5 memiliki bagian baru ini yang perlu Anda tambahkan:

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

Tambahkan host Anda di sini seperti ['www.beta800.net']atau ['*']untuk tes cepat, tetapi jangan gunakan ['*']untuk produksi .

Ric
sumber
32
Wow - ini menggigit kita. Sangat menyebalkan bahwa pengaturan ini terkubur di dalam dokumen. Situs produksi kami tidak akan berfungsi dengan DEBUG = Salah. Terima kasih telah menunjukkan ini !!!
shreddd
4
Lebih lanjut tentang masalah keamanan yang memperkenalkan pengaturan ini: Serangan header HTTP Host praktis . Pasti akan meyakinkan Anda untuk tidak menggunakan ['*']dalam produksi.
gertvdijk
4
bl. menjengkelkan bahwa mereka bahkan tidak memasukkannya sebagai nilai default di settings.py, mungkin dengan komentar expanatory ...
hwjp
7
Terkadang saya bertanya-tanya mengapa Django menjadi semakin terbelakang! Tentunya mereka adalah programmer yang jauh lebih baik daripada saya, tetapi saya benar-benar tidak mengerti keputusan untuk "memperbaiki" kerentanan pada level aplikasi, ketika langkah nyata dan bersih adalah mengkonfigurasi server dengan benar. Hal yang sama berlaku untuk "templat caching" dan "koneksi persisten" ... kode tidak berguna yang tidak akan pernah digunakan di situs web yang serius; masih disajikan sebagai cawan suci pemrograman! Mungkin hanya saya, saya pernah salah sebelumnya!
StefanNch
3
Nevermind, menemukan masalahnya. Itu terkait dengan django-pipelineperilaku ketika statis belum dikumpulkan. Sebagai tip umum, menempatkan breakpoint dalam handle_uncaught_exceptionmetode Django akan membantu Anda mengetahui apa yang terjadi di sini.
Pieter
51

Saya tahu ini sudah terlambat tapi saya berakhir di sini dengan mencari kesalahan saya 500 dengan DEBUG=False, dalam kasus saya itu ternyata menjadi ALLOWED_HOSTStetapi saya gunakan os.environ.get('variable')untuk mengisi host, saya tidak melihat ini sampai saya mengaktifkan logging, Anda dapat log semua kesalahan ke file dengan di bawah ini dan itu akan masuk bahkan ketika 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',
        },
    }
}
squareborg
sumber
16
Ini harus menjadi jawaban yang diterima. Jauh lebih bermanfaat untuk bertanya pada kerangka itu sendiri apa yang salah setelah menggunakan pengaturan produksi, daripada mencoba menebak.
Stefan Dragnev
4
Memang, ini bukan sesuatu yang berkeliaran dalam kegelapan tentang. Lihat saja pesan kesalahan yang biasanya Anda lihat menggunakan metode ini. Dalam kasus saya, saya kehilangan pengaturan yang berbeda di pengaturan saya .py yang dicari aplikasi saya. Yang saya butuhkan hanyalah log untuk melacak ini. Satu catatan penting: saya menambahkan / path / ke / my / django / sebelum 'mysite.log' seperti yang ditunjukkan dalam contoh dokumen: docs.djangoproject.com/en/1.10/topics/logging/#examples
Rob
4
Saya telah menghabiskan berjam-jam mencari solusi, tidak ada gunanya. menurut jawaban ini gunakan saja pencatatan dan Anda seharusnya memiliki masalah, ini adalah jawaban terbaik. Terima kasih OP!
Stack
Kesalahan server saya tampaknya tidak menghasilkan log apa pun! Saya telah mencoba berbagai konfigurasi logging tetapi tidak berhasil. Ada ide?
cammil
5
Terima kasih! Ini menyelesaikan kesalahan saya. Ternyata saya harus menjalankan collstatic untuk mengumpulkan beberapa aset statis dari sebuah paket.
themessup
33

Saya mengalami masalah yang sama baru-baru ini di Django 2.0. Saya dapat memecahkan masalah dengan menetapkan DEBUG_PROPAGATE_EXCEPTIONS = True. Lihat di sini: https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions

Dalam kasus saya, kesalahannya adalah ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'. Saya memperbaikinya dengan menjalankan secara lokal python manage.py collectstatic.

Kyle Gibson
sumber
Saya melakukan hal yang sama tetapi secara kolektif tidak memperbaikinya untuk saya. Apakah Anda mendapat pesan kesalahan "tidak dapat dihubungi"? Dalam hal itu, bagaimana Anda memperbaikinya?
Kavi Vaidya
23

Dalam kasus saya, membaca dokumen aplikasi pihak ketiga dengan benar menyelamatkan saya.

Pelakunya? django_compressor

Saya punya

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

DEBUG = True selalu memberi saya 500. Untuk memperbaikinya, saya membutuhkan garis di pengaturan saya untuk membuatnya berjalan

COMPRESS_ENABLED = os.environ.get('COMPRESS_ENABLED', False)
KhoPhi
sumber
Terima kasih itu alasannya itu tidak berhasil untuk saya, tetapi bukankah baris itu menonaktifkan django_compressor dari melakukan tugasnya?
Fanckush
1
@Fanckush Tidak. Tidak ada kerugian yang terlibat. django-compressor.readthedocs.io/en/latest/settings/… Kompresor masih akan melakukan tugasnya dengan sempurna! Cukup kompres semua statika Anda (seperti css), sehingga pengaturan tidak berguna karena aset Anda sudah dikompresi
KhoPhi
13

Benar, dalam Django 1.5 jika DEBUG = Salah, konfigurasikan ALLOWED_HOSTS, tambahkan domain tanpa nomor port. contoh:

ALLOWED_HOSTS = ['localhost']
tonyprr
sumber
Untuk alasan apa pun, menggunakan 'localhost' tidak berhasil untuk saya. Saya harus menggunakan IP '127.0.0.1' sebagai gantinya. Saya juga bisa menggunakan '*' jika Anda ketakutan dan hanya ingin itu berfungsi. Saya tidak akan menyarankan melakukan itu dalam produksi. OSX menjalankan Django 1.4.20
BlakePetersen
11

Anda juga harus memeriksa URL Anda di semua tempat. Ketika DEBUGdiset ke False, semua URL tanpa trailing /diperlakukan sebagai bug, tidak seperti yang Anda miliki DEBUG = True, dalam hal ini Django akan menambahkan di /mana pun ia hilang. Jadi, singkatnya, pastikan semua tautan berakhir dengan garis miring di MANA SAJA.

webzy
sumber
3
cukup gunakan tag balik dan url dan Anda akan baik
maazza
pengaturan DEBUG=Falsedapat mengungkap kesalahan impor juga: stackoverflow.com/questions/25676453/…
ecoe
bahkan tautan ke aset js dan css?
amchugh89
@ amchugh89: tidak, hanya URL "django"
webzy
1
Masalah saya adalah bahwa whitenoise tidak dapat menemukan beberapa gambar dan melempar ValueError. Saya juga tidak bisa menemukannya, tetapi tidak tahu bagaimana cara memberitahu whitenoise untuk tidak mencarinya. Jadi saya mematikan whitenoise, gunakan servis statis Django dan sekarang saya bisa menjalankan debug = False in prod. Jelas tidak ideal :(
amchugh89
7

Saya punya cerita lucu untuk semua. Setelah mencapai halaman ini saya berkata, "Eureka! Saya diselamatkan. Itu HARUS menjadi masalah saya." Jadi saya memasukkan ALLOWED_HOSTSdaftar yang diperlukan di setting.py dan ... tidak ada. Kesalahan 500 lama yang sama. Dan tidak, itu bukan karena kurangnya file 404.html.

Jadi selama 2 hari saya menyibukkan diri dengan teori-teori liar, seperti itu ada hubungannya dengan melayani file statis (mengerti bahwa saya seorang noob dan noobs tidak tahu apa yang mereka lakukan).

Jadi apa itu? Sekarang Tuan Moderator yang memberikan tip berguna. Sedangkan pengembangan saya Django adalah versi 1.5.something, versi server produksi saya adalah 1.5.something + 1 ... atau mungkin ditambah 2. Apapun. Dan setelah saya menambahkan ALLOWED_HOSTSke versi desktop dari settings.py , yang tidak memiliki apa yang diminta hwjp --- "nilai default di settings.py, mungkin dengan komentar penjelasan" --- Saya melakukan hal yang sama pada server produksi dengan domain yang tepat untuk itu.

Tetapi saya gagal memperhatikan bahwa pada server produksi dengan versi Django yang lebih baru ada nilai default di settings.py dengan komentar penjelasan. Itu jauh di bawah tempat saya membuat entri saya, tidak terlihat di monitor. Dan tentu saja daftarnya kosong. Karena itu buang-buang waktu saja.

Mike O'Connor
sumber
1
saya memiliki pola lucu yang persis sama !, kecuali bahwa itu menjadi lucu hanya setelah saya menemukan ini, terima kasih. sebelum itu benar-benar membuat frustrasi
binithb
Sesuatu yang membantu dalam semua ini adalah dengan menggunakan local_settings.pyuntuk setiap lingkungan dan kemudian mengimpornya settings.py.
nicorellius
1
yang ingin saya lakukan adalah memiliki pengaturan / direktori alih-alih setting.py. Dalam direktori ini, Anda dapat memiliki file .py terpisah untuk lingkungan yang berbeda, dan base.py untuk pengaturan umum. Pengaturan yang bergantung pada produksi kemudian dapat mulai dengan mengimpor * dari pengaturan dasar, dan hanya menimpa apa pun yang perlu ditimpa. Juga, init .py yang diperlukan untuk mengubah pengaturan / direktori tersebut menjadi modul yang valid, pertama-tama dapat mengimpor dari base.py, dan kemudian mencoba mengimpor dari local.py (yang hanya akan ada secara lokal). itu berarti Anda tidak perlu menentukan pengaturan lokal secara manual
mephisto
7

Melengkapi jawaban utama
Sangatlah menjengkelkan untuk mengubah ALLOWED_HOSTS dan DEBUG konstanta global settings.pyketika beralih antara pengembangan dan produksi. Saya menggunakan kode ini untuk mengatur pengaturan ini secara otomatis:

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",]
    ...

Jika Anda menggunakan macOS Anda bisa menulis kode yang lebih umum:

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

Untuk apa nilainya - saya mendapatkan 500 dengan hanya DEBUG = Falsepada beberapa halaman. Menelusuri kembali pengecualian dengan pdb mengungkapkan aset yang hilang (saya menduga {% static ... %}tag templat adalah biang keladinya bagi 500).

pengguna316054
sumber
1
Ini juga masalah saya, template dasar yang dirujuk oleh halaman custom 404 menggunakan tag statis tetapi tidak menyertakan {% load static%} di bagian atas. Saya tidak memperhatikannya di tempat lain karena template saya yang lain memiliki baris ini, tetapi masuk akal untuk meletakkannya di pangkalan bagaimanapun karena mengacu pada file statis di semua tempat.
krischan
2
Solusi yang sama di sini - saya menggunakan staticuntuk memasukkan file CSS yang tidak ada.
Phil Gyford
5

Saya menghadapi masalah yang sama ketika saya melakukannya DEBUG = FALSE. Berikut adalah solusi terkonsolidasi yang tersebar dalam jawaban di atas dan tulisan lainnya.

Secara default, di settings.py kita miliki ALLOWED_HOSTS = []. Berikut ini beberapa kemungkinan perubahan yang harus Anda ALLOWED_HOSTSnilai sesuai skenario untuk menghilangkan kesalahan:

1: Nama domain Anda:

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

2: IP server yang digunakan jika Anda belum memiliki nama domain (yang merupakan kasus saya dan berfungsi dengan sangat baik):

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

3: Jika Anda menguji pada server lokal, Anda dapat mengedit settings.pyatau settings_local.pysebagai:

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

4: Anda juga dapat memberikan '*' dalam ALLOWED_HOSTSnilai tetapi tidak direkomendasikan dalam lingkungan produksi karena alasan keamanan:

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

Saya juga memposting solusi terperinci di blog saya yang mungkin ingin Anda referensikan.

Ali Raza Bhayani
sumber
5

ALLOWED_HOSTS BUKAN satu-satunya masalah, bagi saya saya harus membuat 404.html dan meletakkannya di level dasar templat saya (bukan level aplikasi) - Juga, Anda dapat membuat tampilan 404 dan menambahkan url 404 handler tapi saya pikir itu pilihan. 404.html memperbaikinya

di mainproject.urls

handler404 = 'app.views.custom_404'

di app.views

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

lalu buat templat / 404.html templat

mendapat ini dari S / O post lain yang saya tidak dapat menemukannya

EDIT

juga, saya mendapatkan 500 kesalahan ketika saya melayani aset dengan whitenoise. Tidak dapat mengetahuinya selama hidup saya, kesalahan adalah ValueError dari whitenoise karena tidak dapat menemukan aset yang juga tidak dapat saya temukan, harus menggunakan default django serve untuk saat ini

amchugh89
sumber
8
Saya memiliki masalah yang sama dengan whitenoise. python manage.py collectstaticmemperbaikinya.
Eugene Pakhomov
1
@ amchungh89 Anda adalah penyelamat hidup! Terima kasih untuk menunjukkan itu.
Deepak Sharma
5

Saya sedang mencari dan menguji lebih lanjut tentang masalah ini dan saya menyadari bahwa direktori file statis ditentukan dalam settings.py dapat menjadi penyebabnya, jadi pertama, kita perlu menjalankan perintah ini

python manage.py collectstatic

di settings.py, kode akan terlihat seperti ini:

STATIC_URL = '/static/'

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

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

Saya tahu bahwa ini adalah pertanyaan yang sangat lama, tapi mungkin saya bisa membantu orang lain. Jika Anda memiliki 500 kesalahan setelah pengaturan DEBUG = Salah, Anda selalu dapat menjalankan runserver manage.py di baris perintah untuk melihat kesalahan yang tidak akan muncul di log kesalahan web apa pun.

n0grip
sumber
2

Pertengahan 2019 dan saya menghadapi kesalahan ini setelah beberapa tahun berkembang bersama Django. Membuatku bingung sepanjang malam! Itu tidak diperbolehkan host (yang harus membuang 400), semuanya diperiksa, akhirnya melakukan kesalahan logging hanya untuk menemukan bahwa beberapa file statis yang hilang / rusak (setelah kumpulkan) statis sedang mengacaukan setup. Singkat cerita, bagi mereka yang bingung DAN BEGITU TERJADI MENGGUNAKAN WHITENOISE ATAU STATISTIK DJANGO KEMBALI DENGAN CACHE (manifest statis file), mungkin ini untuk Anda.

  1. Pastikan Anda mengatur semuanya (seperti yang saya lakukan untuk backend whitenoise ... backend Django baca terus) http://whitenoise.evans.io/en/stable/django.html

  2. Jika kode kesalahan 500 masih menembak Anda, catat pengaturan Anda.STATICFILES_STORAGE.

Setel ke salah (untuk memutihkan backend dengan kompresi)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

atau (biarkan sebagai django default)

STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage

Semua dalam semua, MASALAH tampaknya berasal dari fakta bahwa cache backenoise + kompresi backend ini ->

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

atau backend caching django itu sendiri ->

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

... tidak bekerja dengan baik untuk saya, karena css saya merujuk beberapa sumber lain yang mungkin tercampur selama caching collatic / backend. Masalah ini juga berpotensi disorot di http://whitenoise.evans.io/en/stable/django.html#storage-troubleshoot

aaronlhe
sumber
1

Saya pikir itu juga bisa menjadi pengaturan server http. Milik saya masih rusak dan telah ALLOWED_HOSTS sepanjang waktu. Saya dapat mengaksesnya secara lokal (saya menggunakan gunicorn), tetapi tidak melalui nama domain ketika DEBUG = Salah. ketika saya mencoba menggunakan nama domain itu kemudian memberi saya kesalahan, jadi membuat saya berpikir itu masalah terkait nginx.

Ini file conf saya untuk 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;
}
pengguna2868304
sumber
File konfigurasi gunicorn saya adalah sebagai berikut: #! / bin / bash cd / var / web / delicms_env / deli_cms / source ../bin/activate exec gunicorn --workers = 3 deli_cms.wsgi: application
user2868304
masalah saya sekarang terpecahkan, saya menggunakan skrip gunicorn_django dan itu memberi saya pesan yang sudah ketinggalan zaman. Masih tidak yakin mengapa itu bekerja secara lokal, tidak mengubah konfigurasi nginx saya hanya mengubah skrip lama untuk menggunakan gunicorn dan menggunakan modul aplikasi wsgi: dan berfungsi lagi. Gunicorn juga melemparkan beberapa pesan penghinaan sebelum ini, tetapi tidak ada yang spesifik untuk masalah saya.
user2868304
1

Saya memiliki masalah serupa, dalam kasus saya itu disebabkan oleh memiliki skrip Komentar di dalam tag tubuh.

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

Saya mengalami masalah ini. Ternyata saya termasuk dalam template, menggunakan statictag template, file yang sudah tidak ada lagi. Melihat log menunjukkan masalah pada saya.

Saya kira ini hanyalah salah satu dari banyak kemungkinan alasan untuk jenis kesalahan ini.

Moral cerita: selalu mencatat kesalahan dan selalu memeriksa catatan.

Nishant George Agrwal
sumber
1

Berkat @squarebear, dalam file log, saya menemukan kesalahan: ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...>.

Saya punya beberapa masalah di aplikasi Django saya. Saya menghapus baris
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'yang saya temukan dari dokumentasi heroku.

Saya juga harus menambahkan direktori tambahan (berkat jawaban SO yang lain ) staticdi root aplikasi Django myapp/staticwalaupun saya tidak menggunakannya. Kemudian menjalankan perintah python manage.py collectstaticsebelum menjalankan server memecahkan masalah. Akhirnya, mulai bekerja dengan baik.

kHarshit
sumber
Bagaimana ini menjawab pertanyaan awal?
Nick
1

Saya mulai mendapatkan 500 untuk debug = Salah dalam bentuk

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

saat menaikkan django.core.exceptions.ValidationError alih-alih menaikkan rest_framework.serializers.ValidationError

Agar adil, itu sudah menaikkan 500 sebelumnya, tetapi sebagai ValidationError, dengan debug = False, ini berubah menjadi NoReverseMatch.

DZet
sumber
1

ini mungkin membantu orang lain, dalam kasus saya masalah dengan favicon yang hilang.

DAMAR225
sumber
0

Saya tahu ini adalah pertanyaan lama, tetapi saya juga mendapatkan 500 kesalahan ketika DEBUG = Salah. Setelah beberapa jam, saya menyadari bahwa saya lupa mengakhiri beberapa tautan di base.html saya dengan garis miring.

SethB
sumber
bahkan barang-barang css dan js?
amchugh89
0

Ini sudah tua dan masalah saya akhirnya terkait dengan masalah tetapi tidak untuk OP tetapi solusi saya adalah untuk orang lain yang mencoba di atas tetapi tidak berhasil.

Saya memiliki pengaturan dalam versi modifikasi Django untuk memperkecil CSS dan file JS yang hanya berjalan ketika DEBUG dimatikan. Server saya tidak menginstal pengukur CSS dan melemparkan kesalahan. Jika Anda menggunakan Django-Mako-Plus, ini mungkin masalah Anda.

Spartacus
sumber
0

Satu hal kecil yang perlu diperhatikan, Jika array tidak ada di dalamnya, maka semua host yang diizinkan berikutnya diabaikan.

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

Ayush Goel
sumber
0

Agak terlambat ke pesta, dan tentu saja mungkin ada banyak masalah tapi saya punya masalah yang sama dan ternyata saya memiliki {%%} karakter khusus di dalam komentar html saya ...

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

Saya punya satu pandangan yang melemparkan 500 kesalahan dalam debug = false tetapi bekerja di debug = true. Bagi siapa saja yang mendapatkan hal semacam ini dan Host yang Diizinkan bukan masalah, saya memperbaiki pandangan saya dengan memperbarui tag statis templat yang menunjuk ke lokasi yang salah.

Jadi saya sarankan hanya memeriksa tautan dan tag kedap udara di setiap templat yang digunakan, mungkin hal-hal tertentu melewati jaring dalam debug tetapi memberikan kesalahan dalam produksi.

Tom
sumber
0

Saya menemukan penyebab lain dari kesalahan 500 ketika DEBUG = Salah. Saya menggunakan compressorutilitas Django dan insinyur front-end kami menambahkan referensi ke file font di dalam compress cssblok di template Django. Seperti ini:

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

Solusinya adalah dengan memindahkan tautan ke ttffile di bawah endcompressbaris.

nmgeek
sumber
0

Saya memiliki masalah yang mirip dengan ini dan saya akan melaporkan bagaimana saya menyelesaikan masalah saya karena bisa jadi seseorang juga mengalami hal yang sama.

Dalam kasus saya, kesalahan itu disebabkan karena server tidak menemukan beberapa file statis dari beranda.

Jadi pastikan kesalahan hanya terjadi pada indexatau terjadi pada halaman lain. Jika masalah hanya terjadi dalam indeks sangat mungkin Anda perlu memeriksa file statis. Saya sarankan membuka konsol pratinjau Chrome dan memeriksa adanya kesalahan.

Dalam kasus saya, server tidak dapat menemukan favicon.icodan dua CSS lainnya.

Untuk memperbaiki ini saya lulus python manage.py collectstaticdan berhasil.

Alison Andrade
sumber
0

Saya tahu posting ini cukup lama tetapi masih sangat relevan hari ini.

Untuk apa nilainya - saya mendapatkan 500 dengan DEBUG = Falseuntuk semua halaman di situs saya.

Saya tidak mendapatkan traceback saat debug.

Saya harus melalui setiap tautan statis di templat saya di dalam situs saya dan menemukan satu / (garis miring) di depan sumber gambar saya. {% statis ... %}. Ini menyebabkan 500 kesalahan dalam DEBUG = Falsetetapi bekerja dengan baik Debug = Truetanpa kesalahan. Sangat menyebalkan! Diperingatkan! Banyak jam waktu terbuang karena garis miring ...

E Wilson
sumber
0

Anda mungkin ingin menjalankan python manage.py collectstaticsetelah mengatur DEBUG = Falsedan ALLOWED_HOSTS = ['127.0.0.1']masuk settings.py. Setelah dua langkah ini aplikasi web saya berjalan dengan baik di server lokal saya bahkan dengan DEBUG = Mode salah.

BTW saya memiliki pengaturan ini di 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'

Saya berasumsi mungkin pengaturan whitenoise ada hubungannya dengan perintah collectstatic.

Harry
sumber
-3

Ok setelah mencoba banyak hal, solusi yang tepat adalah ...

Anda perlu mengatur DEBUG = 'FALSE'tidak Falseatau FALSE, tetapi 'FALSE'dengan''

xGoPox
sumber
Saya pikir 'SALAH' adalah string, jadi itu sama dengan Benar, itu sebabnya tidak mendapatkan kesalahan
apet