Đặt DEBUG = Sai gây ra 500 Lỗi


298

Khi tôi thay đổi DEBUG = False , trang web của tôi sẽ tạo ra 500 (sử dụng wsgi & runserver manage.py), và không có thông tin lỗi trong Apache log lỗi và nó sẽ chạy bình thường khi tôi thay đổi debugđến True.

Tôi đang sử dụng Django 1.5 & Python 2.7.3 ở đây là nhật ký truy cập Apache và không có bất kỳ nhật ký nào trong nhật ký lỗi 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"

Đây là tập tin cài đặt của tôi:

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

Có, tôi đã thêm tệp html 403 & 404 500 trong thư mục mẫu của mình
zhiguo.wang

Bạn có sẵn các tệp 500.html và 404.html và 403.html không? Tôi nghĩ rằng tôi nhớ có vấn đề với một dự án đã triển khai không có các tệp đó trong thư mục gốc của thư mục mẫu của tôi.
esse

Nếu trang web của bạn tạo ra lỗi 500, cần có một số thông tin trong nhật ký apache, bạn có thể muốn vượt qua một đoạn cuối của tệp nhật ký lỗi để mọi người xem.
esse

87
Bạn có thể muốn thay đổi SECRET_KEY ngay bây giờ khi nó có sẵn công khai ...
Fraxtil

1
Đây không phải là câu trả lời cho tất cả mọi người. Như được hiển thị bên dưới trong stackoverflow.com/a/37218484 / 408977 , có thể có nhiều lý do tại sao điều này xảy ra. Với một số đăng nhập đơn giản, bạn có thể tìm ra mà không cần phỏng đoán.
Cướp

Câu trả lời:


413

Django 1.5 đã giới thiệu cài đặt máy chủ được phép cần thiết vì lý do bảo mật. Tệp cài đặt được tạo bằng Django 1.5 có phần mới này mà bạn cần thêm:

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

Thêm máy chủ của bạn ở đây như ['www.beta800.net']hoặc ['*']để thử nghiệm nhanh, nhưng không sử dụng ['*']cho sản xuất .


32
Wow - điều này hơi khó với chúng tôi. Nó thực sự hút rằng thiết lập này được chôn vùi trong các tài liệu. Trang web sản xuất của chúng tôi sẽ không hoạt động với DEBUG = Sai. Cảm ơn bạn đã chỉ ra điều này!!!
shreddd

4
Thông tin thêm về các vấn đề bảo mật đã giới thiệu cài đặt này: Tấn công tiêu đề Máy chủ HTTP thực tế . Chắc chắn sẽ thuyết phục bạn không sử dụng ['*']trong sản xuất.
gertvdijk

4
bl. phiền phức vì họ thậm chí không gắn nó vào như một giá trị mặc định trong settings.py, có lẽ với một nhận xét mở rộng ...
hwjp

7
Đôi khi tôi tự hỏi tại sao Django ngày càng trở nên chậm phát triển! Chắc chắn những kẻ đó là những lập trình viên giỏi hơn tôi rất nhiều, nhưng tôi thực sự không hiểu quyết định "sửa" các lỗ hổng ở cấp ứng dụng, khi đó động thái thực sự và rõ ràng sẽ là cấu hình máy chủ đúng cách. Tương tự như vậy đối với "bộ đệm mẫu" và "kết nối liên tục" ... Mã vô dụng sẽ không bao giờ được sử dụng trong một trang web nghiêm túc; vẫn được trình bày như chén thánh của lập trình! Có lẽ chỉ là tôi, tôi đã sai trước đây!
StefanNch

3
Nevermind, tìm thấy vấn đề. Nó có liên quan đến django-pipelinehành vi của khi tĩnh chưa được thu thập. Như một lời khuyên chung, việc đặt một điểm dừng trong handle_uncaught_exceptionphương pháp của Django sẽ giúp bạn tìm hiểu những gì đang diễn ra ở đây.
Pieter

51

Tôi biết điều này là muộn nhưng tôi đã kết thúc việc tìm kiếm lỗi 500 của mình DEBUG=False, trong trường hợp của tôi, nó đã trở thành ALLOWED_HOSTSnhưng tôi đang sử dụng os.environ.get('variable')để điền vào máy chủ, tôi không nhận thấy điều này cho đến khi tôi kích hoạt đăng nhập, bạn có thể ghi nhật ký tất cả các lỗi vào tập tin bên dưới và nó sẽ ghi lại ngay cả khi 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
Đây phải là câu trả lời được chấp nhận. Sẽ hữu ích hơn nhiều khi chỉ cần tự hỏi khung công tác có gì sai sau khi sử dụng cài đặt sản xuất, thay vì cố gắng đoán.
Stefan Dragnev

4
Thật vậy, đây không phải là thứ để lang thang trong bóng tối. Chỉ cần nhìn vào thông báo lỗi bạn thường thấy bằng cách sử dụng phương pháp này. Trong trường hợp của tôi, tôi đã thiếu một cài đặt khác trong cài đặt của mình mà ứng dụng của tôi đang tìm kiếm. Tất cả tôi cần là nhật ký để theo dõi điều này. Một lưu ý quan trọng: Tôi đã thêm / path / to / my / django / trước 'mysite.log' như trong ví dụ về tài liệu: docs.djangoproject.com/en/1.10/topics/logging/#examples
Rob

4
Tôi đã dành hàng giờ để tìm kiếm một giải pháp, không sử dụng. Theo câu trả lời này chỉ cần sử dụng đăng nhập và bạn nên có vấn đề của bạn, đây là câu trả lời tốt nhất. Cảm ơn OP!
Xếp chồng

Lỗi máy chủ của tôi dường như không tạo ra bất kỳ nhật ký! Tôi đã thử các cấu hình đăng nhập khác nhau nhưng không có kết quả. Có ý kiến ​​gì không?
cammil

5
Cảm ơn bạn! Điều này đã giải quyết lỗi của tôi. Hóa ra tôi cần chạy collstatic để thu thập một số tài sản tĩnh từ một gói.
themessup

33

Tôi đã gặp vấn đề tương tự chỉ gần đây trong Django 2.0. Tôi đã có thể tìm ra vấn đề bằng cách thiết lập DEBUG_PROPAGATE_EXCEPTIONS = True. Xem tại đây: https://docs.djangoproject.com/en/2.0/ref/sinstall/#debug-propagate-exceptions

Trong trường hợp của tôi, lỗi là ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'. Tôi đã sửa nó bằng cách chạy cục bộ python manage.py collectstatic.


Tôi đi điều tương tự nhưng collstatic đã không sửa nó cho tôi. Bạn có nhận được "lỗi không thể đạt được"? Trong trường hợp đó, bạn đã sửa nó như thế nào?
Kavi Vaidya

23

Trong trường hợp của tôi, việc đọc tài liệu của các ứng dụng bên thứ ba đã giúp tôi tiết kiệm.

Thủ phạm? django_compressor

Tôi đã có

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

DEBUG = True luôn cho tôi 500. Để sửa nó, tôi cần một dòng trong cài đặt của mình để nó chạy

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

Cảm ơn đó là lý do nó không hoạt động với tôi, nhưng dòng đó không vô hiệu hóa django_compressor khỏi công việc của nó?
Fanckush

1
@Fanckush Không. Không có hại có liên quan. django-compressor.readthedocs.io/en/latest/sinstall/iêng Compressor vẫn sẽ hoàn thành công việc của mình một cách hoàn hảo! Chỉ cần nén tất cả số liệu thống kê của bạn (như css), do đó cài đặt sẽ vô dụng vì tài sản của bạn đã được nén
KhoPhi

13

Phải, trong Django 1.5 nếu DEBUG = Sai, định cấu hình ALLOWED_HOSTS, thêm tên miền mà không cần số cổng. thí dụ:

ALLOWED_HOSTS = ['localhost']

Vì bất kỳ lý do gì, sử dụng 'localhost' không hiệu quả với tôi. Tôi đã phải sử dụng IP '127.0.0.1' thay thế. Tôi cũng có thể sử dụng '*' nếu bạn cảm thấy bối rối và chỉ muốn nó hoạt động. Tôi sẽ không khuyên làm điều đó trong sản xuất, tuy nhiên. OSX chạy Django 1.4.20
BlakePeteren

11

Bạn cũng phải kiểm tra URL của bạn ở khắp mọi nơi. Khi DEBUGđược đặt thành False, tất cả các URL không có dấu vết /đều được coi là một lỗi, không giống như khi bạn có DEBUG = True, trong trường hợp đó Django sẽ xuất hiện /ở mọi nơi mà nó bị thiếu. Vì vậy, trong ngắn hạn, đảm bảo tất cả các liên kết kết thúc bằng một dấu gạch chéo MỌI NƠI.


3
chỉ cần sử dụng thẻ đảo ngược và url và bạn sẽ ổn thôi
maazza

thiết lập DEBUG=Falsecó thể tiết lộ lỗi nhập cũng như: stackoverflow.com/questions/25676453/...
eCoE

thậm chí liên kết đến tài sản js và css?
amchugh89

@ amchugh89: không, chỉ là URL "django"
webzy

1
Vấn đề của tôi là whitenoise không thể tìm thấy một số hình ảnh và đang ném ValueError. Tôi cũng không thể tìm thấy nó, nhưng không biết làm thế nào để nói với whitenoise không tìm kiếm nó. Vì vậy, tôi đã tắt whitenoise, sử dụng django tĩnh phục vụ và bây giờ tôi có thể chạy debug = false trong prod. Rõ ràng là không lý tưởng :(
amchugh89

7

Tôi có một câu chuyện vui nhộn cho tất cả. Sau khi đến trang này, tôi nói "Eureka! Tôi đã được cứu. Đó là vấn đề của tôi." Vì vậy, tôi chèn yêu cầuALLOWED_HOSTS danh sách vào trong cài đặt và ... không có gì. Cùng lỗi 500 cũ. Và không, không phải vì thiếu tệp 404.html.

Vì vậy, trong 2 ngày, tôi bận rộn với những lý thuyết hoang dã, chẳng hạn như nó có liên quan đến việc phục vụ các tệp tĩnh (hiểu rằng tôi là một người mới và không biết họ đang làm gì).

Vậy nó là gì? Bây giờ đến lượt ông Moderator, chúng tôi đến với một mẹo hữu ích. Trong khi Django phát triển của tôi là phiên bản 1.5. Một cái gì đó, phiên bản máy chủ sản xuất của tôi là 1.5.s Something + 1 ... hoặc có thể cộng với 2. Sao cũng được. Và sau đó, tôi đã thêm ALLOWED_HOSTSphiên bản máy tính để bàn của settings.txt , thiếu những gì hwjp yêu cầu --- một "giá trị mặc định trong settings.py, có lẽ với một nhận xét giải thích" --- Tôi cũng làm như vậy trên máy chủ sản xuất với tên miền thích hợp cho nó.

Nhưng tôi đã không nhận thấy rằng trên máy chủ sản xuất với phiên bản Django sau này, có một giá trị mặc định trong settings.py với một nhận xét giải thích. Nó ở ngay bên dưới nơi tôi nhập cảnh, khuất tầm nhìn trên màn hình. Và tất nhiên danh sách trống rỗng. Do đó lãng phí thời gian của tôi.


1
tôi đã có chính xác mô hình vui nhộn tương tự!, ngoại trừ việc nó trở nên vui nhộn chỉ sau khi tôi tìm thấy điều này, cảm ơn. trước đó nó chỉ đơn giản là bực bội
binithb

Một cái gì đó giúp trong tất cả điều này là sử dụng một local_settings.pycho mỗi môi trường và sau đó nhập nó vàosettings.py .
nicorellius

1
những gì tôi muốn làm là có một cài đặt / thư mục thay vì cài đặt. Trong thư mục này, bạn có thể có các tệp .py riêng biệt cho các môi trường khác nhau và một cơ sở cho các cài đặt chung. Sau đó, cài đặt phụ thuộc sản xuất có thể bắt đầu bằng cách nhập * từ cài đặt cơ sở và chỉ cần ghi đè bất cứ thứ gì chúng cần ghi đè. Ngoài ra, init .py cần thiết để biến cài đặt / thư mục đó thành một mô-đun hợp lệ, trước tiên có thể nhập từ cơ sở, sau đó thử nhập từ local.txt (chỉ tồn tại cục bộ). điều đó có nghĩa là bạn không cần chỉ định cài đặt cục bộ theo cách thủ công
mephisto

7

Bổ sung cho câu trả lời chính
Thật khó chịu khi thay đổi các hằng số toàn cầu ALLOWED_HOSTS và DEBUG settings.pykhi chuyển đổi giữa phát triển và sản xuất. Tôi đang sử dụng mã này để đặt các cài đặt này tự động:

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

Nếu bạn sử dụng macOS, bạn có thể viết mã chung hơn:

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

6

Đối với những gì nó có giá trị - tôi đã nhận được 500 với chỉ DEBUG = Falsetrên một số trang. Truy tìm lại ngoại lệ với pdb đã tiết lộ một tài sản bị thiếu (tôi nghi ngờ {% static ... %}thẻ mẫu là thủ phạm của 500.


1
Đây cũng là vấn đề của tôi, mẫu cơ sở mà trang 404 tùy chỉnh đang tham chiếu đã sử dụng thẻ tĩnh nhưng không bao gồm {% load static%} ở trên cùng. Tôi đã không nhận thấy nó ở nơi khác vì các mẫu khác của tôi có dòng này nhưng dù sao cũng nên đặt nó vào cơ sở vì nó đề cập đến các tệp tĩnh ở khắp mọi nơi.
krischan

2
Cùng một giải pháp ở đây - Tôi đã sử dụng staticđể bao gồm một tệp CSS không tồn tại.
Phil Gyford

5

Tôi đã đối mặt với cùng một vấn đề khi tôi đã làm DEBUG = FALSE . Đây là một giải pháp tổng hợp như nằm rải rác trong câu trả lời ở trên và các bài viết khác.

Theo mặc định, trong cài đặt, chúng tôi có ALLOWED_HOSTS = []. Dưới đây là những thay đổi có thể bạn sẽ phải thực hiện theo ALLOWED_HOSTSgiá trị theo kịch bản để thoát khỏi lỗi:

1: Tên miền của bạn:

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

2: IP máy chủ được triển khai của bạn nếu bạn chưa có tên miền (đó là trường hợp của tôi và hoạt động như một cơ duyên):

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

3: Nếu bạn đang thử nghiệm trên máy chủ cục bộ, bạn có thể chỉnh sửa settings.pyhoặc settings_local.pydưới dạng:

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

4: Bạn cũng có thể cung cấp '*' trong ALLOWED_HOSTSgiá trị nhưng không được khuyến nghị trong môi trường sản xuất vì lý do bảo mật:

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

Tôi cũng đã đăng một giải pháp chi tiết trên blog của tôi mà bạn có thể muốn tham khảo.


5

ALLOWED_HOSTS KHÔNG phải là vấn đề duy nhất, đối với tôi, tôi đã phải tạo 404.html và đặt nó ở cấp cơ sở của các mẫu của tôi (không phải cấp ứng dụng) - Ngoài ra, bạn có thể tạo chế độ xem 404 và thêm url 404handler nhưng tôi nghĩ đó là không bắt buộc. 404.html đã sửa nó

trong mainproject.urls

handler404 = 'app.views.custom_404'

trong app.view

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

sau đó tạo mẫu / 404.html mẫu

có được điều này từ một bài đăng S / O khác mà tôi không thể tìm thấy nó

BIÊN TẬP

Ngoài ra, tôi nhận được 500 lỗi khi tôi phục vụ tài sản với whitenoise. Không thể nhận ra rằng đối với cuộc sống của tôi, lỗi là ValueError từ whitenoise không thể tìm thấy một tài sản mà tôi cũng không thể tìm thấy, phải đi với django mặc định phục vụ ngay bây giờ


8
Tôi đã có cùng một vấn đề với whitenoise. python manage.py collectstaticĐã sửa nó.
Eugene Pakhomov

1
@ amchungh89 bạn là người cứu mạng! Thanx cho chỉ ra rằng.
Deepak Sharma

5

Tôi đã tìm kiếm và kiểm tra thêm về vấn đề này và tôi nhận ra rằng các thư mục tệp tĩnh được chỉ định trong settings.txt có thể là nguyên nhân của việc này, vì vậy, chúng ta cần chạy lệnh này

python manage.py collectstatic

trong settings.py, mã sẽ trông giống như thế này:

STATIC_URL = '/static/'

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

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

3

Tôi biết rằng đây là một câu hỏi siêu cũ, nhưng có lẽ tôi có thể giúp đỡ người khác. Nếu bạn gặp phải lỗi 500 sau khi đặt DEBUG = Sai, bạn luôn có thể chạy máy chủ Manage.txt trong dòng lệnh để xem bất kỳ lỗi nào sẽ không xuất hiện trong bất kỳ nhật ký lỗi web nào.


2

Giữa năm 2019 và tôi đã phải đối mặt với lỗi này sau một vài năm phát triển với Django. Cố gắng cho tôi cả một đêm! Nó không cho phép máy chủ lưu trữ (nên ném 400), mọi thứ khác đã được kiểm tra, cuối cùng đã thực hiện một số lỗi ghi nhật ký để phát hiện ra rằng một số tệp kê khai bị thiếu / hoặc làm rối (sau khi thu thập) đang vặn với thiết lập. Câu chuyện dài, đối với những người bị bối rối và RẤT NHIỀU NGƯỜI SỬ DỤNG WHITENOISE HOẶC THEO TÌNH TRẠNG TÌNH TRẠNG DJANGO VỚI CACHE (tệp tĩnh biểu hiện), có thể đây là dành cho bạn.

  1. Hãy chắc chắn rằng bạn thiết lập mọi thứ (như tôi đã làm cho phần phụ trợ whitenoise ... phần phụ trợ django được đọc trên dù sao) http://whitenoise.evans.io/en/ sóng / django.html

  2. Nếu mã lỗi 500 vẫn bắn bạn xuống, hãy lưu ý đến cài đặt của bạn.STATICFILES_STORAGE.

Đặt nó thành một trong hai (cho phụ trợ whitenoise với nén)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

hoặc (để mặc định là django)

STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage

Nói chung, VẤN ĐỀ dường như đến từ thực tế là bộ đệm trắng này + bộ phụ trợ nén ->

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

hoặc phụ trợ bộ nhớ đệm của django ->

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

... không hoạt động tốt cho tôi, vì css của tôi đã tham khảo một số nguồn khác có thể bị lẫn lộn trong bộ nhớ đệm collstatic / backend. Vấn đề này cũng có khả năng được nhấn mạnh trong http://whitenoise.evans.io/en/urdy/django.html#st Storage-teabledhoot


1

Tôi nghĩ đó cũng có thể là cài đặt máy chủ http. Của tôi vẫn bị hỏng và có ALLOWED_HOSTS toàn bộ thời gian. Tôi có thể truy cập nó cục bộ (tôi sử dụng gunicorn), nhưng không thông qua tên miền khi DEBUG = Sai. Khi tôi thử sử dụng tên miền thì nó báo lỗi, vì vậy tôi nghĩ đó là vấn đề liên quan đến nginx.

Đây là tập tin conf của tôi cho 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;
}

tập tin cấu hình gunicorn của tôi là như sau: # / bin / bash cd / var / web / delicms_env / deli_cms / nguồn ../bin/activate exec gunicorn --workers = 3 deli_cms.wsgi: ứng dụng
user2868304

vấn đề của tôi đã được giải quyết, tôi đang sử dụng tập lệnh gunicorn_django và nó đã cho tôi những thông điệp không được chấp nhận. Vẫn không chắc tại sao nó hoạt động cục bộ, không thay đổi cấu hình nginx của tôi mà chỉ thay đổi tập lệnh cũ để sử dụng gunicorn và sử dụng mô-đun ứng dụng wsgi: thay vào đó và nó hoạt động trở lại. Gunicorn đã ném một số tin nhắn phản đối trước đó nhưng cũng không có gì cụ thể cho vấn đề của tôi.
dùng2868304

1

Tôi có một vấn đề tương tự, trong trường hợp của tôi, đó là do có một đoạn script được bình luận bên trong thẻ body.

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

1

Tôi gặp vấn đề này. Hóa ra tôi đã bao gồm trong mẫu, sử dụngstatic thẻ mẫu, một tệp không còn tồn tại nữa. Một cái nhìn trong nhật ký cho tôi thấy vấn đề.

Tôi đoán đây chỉ là một trong nhiều lý do có thể gây ra loại lỗi này.

Đạo đức của câu chuyện: luôn ghi nhật ký lỗi và luôn kiểm tra nhật ký.


1

Nhờ @squarebear, trong tệp nhật ký, tôi đã tìm thấy lỗi : ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...>.

Tôi đã có một vài vấn đề trong ứng dụng django của tôi. Tôi đã xóa dòng
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'mà tôi tìm thấy từ tài liệu của heroku.

Tôi cũng đã phải thêm thư mục bổ sung (nhờ một câu trả lời SO khác ) statictrong thư mục gốc của ứng dụng django myapp/staticmặc dù tôi không sử dụng nó. Sau đó chạy lệnh python manage.py collectstatictrước khi chạy máy chủ đã giải quyết vấn đề. Cuối cùng, nó bắt đầu hoạt động tốt.


Làm thế nào để trả lời câu hỏi ban đầu?
Nick

1

Tôi bắt đầu nhận được 500 cho debug = Sai ở dạng

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

khi nâng django.core.exceptions.ValidationError thay vì nâng rest_framework.serialulators.ValidationError

Công bằng mà nói, nó đã tăng 500 trước đó, nhưng với tư cách là ValidationError, với debug = false, điều này đã đổi thành NoReverseMatch.


1

điều này có thể giúp đỡ người khác, trong trường hợp của tôi, vấn đề với favicon bị thiếu.


0

Tôi biết đây là một câu hỏi cũ, nhưng tôi cũng đã nhận được một lỗi 500 khi DEBUG = Sai. Sau vài giờ, tôi nhận ra rằng tôi đã quên kết thúc một số liên kết trong cơ sở.html của mình bằng một dấu gạch chéo.


thậm chí các công cụ css và js?
amchugh89

0

Điều này đã cũ và vấn đề của tôi cuối cùng có liên quan đến vấn đề nhưng không phải với OP mà là giải pháp của tôi dành cho bất kỳ ai khác đã thử những điều trên mà không có kết quả.

Tôi đã có một cài đặt trong phiên bản sửa đổi của Django để thu nhỏ các tệp CSS và JS chỉ chạy khi DEBUG bị tắt. Máy chủ của tôi không cài đặt công cụ khai thác CSS và đã khắc phục lỗi. Nếu bạn đang sử dụng Django-Mako-Plus, đây có thể là vấn đề của bạn.


0

Một điều nhỏ cần lưu ý, Nếu mảng không có trong đó, thì tất cả các máy chủ được phép tiếp theo sẽ bị bỏ qua.

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

Một bữa tiệc muộn, và dĩ nhiên có thể có một loạt vấn đề nhưng tôi đã gặp vấn đề tương tự và hóa ra tôi có {%%} ký tự đặc biệt trong nhận xét html của mình ...

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

0

Tôi đã có một quan điểm đã đưa ra một lỗi 500 trong debug = false nhưng hoạt động trong debug = true. Đối với bất kỳ ai nhận được loại điều này và Máy chủ lưu trữ được phép không phải là vấn đề, tôi đã sửa chế độ xem của mình bằng cách cập nhật thẻ tĩnh của mẫu đang trỏ đến vị trí sai.

Vì vậy, tôi khuyên bạn chỉ nên kiểm tra các liên kết và thẻ là kín trong bất kỳ mẫu nào được sử dụng, có thể một số thứ nhất định lướt qua mạng trong gỡ lỗi nhưng đưa ra lỗi trong sản xuất.


0

Tôi đã tìm thấy một nguyên nhân khác của lỗi 500 khi DEBUG = Sai. Tôi sử dụng compressortiện ích Django và kỹ sư mặt trước của chúng tôi đã thêm các tham chiếu đến các tệp phông chữ bên trong một compress csskhối trong mẫu Django. Như thế này:

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

Giải pháp là di chuyển liên kết đến ttftập tin bên dưới endcompressdòng.


0

Tôi đã có một vấn đề tương tự như vậy và tôi sẽ báo cáo cách tôi giải quyết vấn đề của mình bởi vì có thể ai đó cũng đang trải qua điều tương tự.

Trong trường hợp của tôi, lỗi xảy ra do máy chủ không tìm thấy một số tệp tĩnh từ trang chủ.

Vì vậy, hãy chắc chắn rằng lỗi chỉ xảy ra trong index hoặc xảy ra trên một trang khác. Nếu vấn đề chỉ xảy ra trong chỉ mục rất có thể bạn cần kiểm tra các tệp tĩnh. Tôi khuyên bạn nên mở bảng điều khiển xem trước Chrome và kiểm tra xem có lỗi nào không.

Trong trường hợp của tôi, máy chủ không thể tìm thấy favicon.icovà hai CSS khác.

Để khắc phục điều này tôi đã thông qua python manage.py collectstaticvà nó đã làm việc.


0

Tôi biết bài này khá cũ nhưng ngày nay nó vẫn hoàn toàn phù hợp.

Đối với những gì nó có giá trị - tôi đã nhận được 500 với DEBUG = Falsetất cả các trang trên trang web của mình.

Tôi không có dấu vết khi gỡ lỗi.

Tôi đã phải đi qua mọi liên kết tĩnh trong các mẫu trong trang web của mình và tìm thấy một / (dấu gạch chéo phía trước) trước nguồn hình ảnh của tôi. {% tĩnh ...%}. Điều này gây ra lỗi 500 DEBUG = Falsenhưng hoạt động hoàn toàn tốt Debug = Truemà không có lỗi. Rất phiền phức! Được cảnh báo! Nhiều giờ lãng phí do một nhát chém về phía trước ...


0

Bạn có thể muốn chạy python manage.py collectstaticsau khi bạn thiết lập DEBUG = FalseALLOWED_HOSTS = ['127.0.0.1']vào settings.py. Sau hai bước, ứng dụng web của tôi chạy tốt trong máy chủ cục bộ của tôi ngay cả với chế độ DEBUG = Sai.

BTW Tôi có các cài đặt này trong 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'

Tôi giả sử có thể thiết lập whitenoise có liên quan đến lệnh collstatic.


-3

Ok sau khi thử rất nhiều thứ, giải pháp chính xác là ...

bạn cần đặt DEBUG = 'FALSE'không Falsehoặc FALSE, nhưng 'FALSE'với''


Tôi nghĩ rằng 'FALSE' là một chuỗi, vì vậy nó bằng với True, đó là lý do tại sao nó không bị lỗi.
APET
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.