zhi*_*ang 292 django settings django-1.5
有一次,我改变DEBUG = False,我的网站将产生500(使用WSGI和manage.py runserver命令),并且在Apache的错误日志中没有错误信息,当我改变它通常会运行debug到True.
我正在使用Django 1.5和Python 2.7.3这里是Apache访问日志,没有任何登录apache错误日志
www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET / HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET /favicon.ico HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET /favicon.ico HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
Run Code Online (Sandbox Code Playgroud)
这是我的设置文件:
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',
)
Run Code Online (Sandbox Code Playgroud)
Ric*_*Ric 411
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 = []
Run Code Online (Sandbox Code Playgroud)
在这里添加您的主机['www.beta800.net']或['*']进行快速测试,但不要['*']用于生产.
squ*_*org 41
我知道这已经晚了但是我最终在这里搜索了我的错误500 DEBUG=False,在我的情况下它确实是ALLOWED_HOSTS我os.environ.get('variable')用来填充主机,我没有注意到这一点,直到我启用日志记录,你可以使用以下内容将所有错误记录到文件,即使在以下情况下也会记录DEBUG=False:
# settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt' : "%d/%b/%Y %H:%M:%S"
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': 'mysite.log',
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers':['file'],
'propagate': True,
'level':'DEBUG',
},
'MYAPP': {
'handlers': ['file'],
'level': 'DEBUG',
},
}
}
Run Code Online (Sandbox Code Playgroud)
Kyl*_*son 25
我刚刚在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.
Kho*_*Phi 22
在我的情况下,阅读第三方应用程序的文档正确地保存了我.
罪魁祸首?django_compressor
我有
{% load compress %}
{% compress css %}
... css files linked here ..
{% endcompress %}
Run Code Online (Sandbox Code Playgroud)
DEBUG = True 总是给我500.要修复它,我需要在我的设置中使用一行来让它运行
COMPRESS_ENABLED = os.environ.get('COMPRESS_ENABLED', False)
Run Code Online (Sandbox Code Playgroud)
小智 13
对,在Django 1.5中如果DEBUG = False,配置ALLOWED_HOSTS,添加没有端口号的域.例:
ALLOWED_HOSTS = ['localhost']
Run Code Online (Sandbox Code Playgroud)
小智 10
您还必须在整个地方检查您的网址.当DEBUG设置False为时,所有没有尾随的URL /都被视为一个bug,与你有的不同DEBUG = True,在这种情况下,Django会/在它丢失的任何地方附加.因此,简而言之,确保所有链接都以斜线结尾.
2019 年年中,我在使用 Django 开发几年后遇到了这个错误。迷惑了我一整夜!不允许主机(应该抛出 400),检查其他所有内容,最后做了一些错误记录,结果发现一些丢失/或混乱的静态文件清单(在 collectstatic 之后)与设置有关。长话短说,对于那些被难倒并且正在使用 WHITENOISE 或带有缓存的 DJANGO 静态文件后端(清单静态文件)的人来说,也许这适合你。
确保您设置了所有内容(就像我为 whitenoise 后端所做的那样... django 后端仍然阅读) http://whitenoise.evans.io/en/stable/django.html
如果错误代码 500 仍然让您失望,请注意您的 settings.STATICFILES_STORAGE。
将其设置为任一(对于带有压缩的白噪声后端)
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
Run Code Online (Sandbox Code Playgroud)
或(保留 django 默认值)
STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage
Run Code Online (Sandbox Code Playgroud)
总而言之,问题似乎来自于这个白噪声缓存 + 压缩后端 -->
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Run Code Online (Sandbox Code Playgroud)
或 django 自己的缓存后端 -->
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
Run Code Online (Sandbox Code Playgroud)
...对我来说不是很好,因为我的 css 引用了一些其他来源,这些来源可能在 collectstatic / 后端缓存期间混淆。这个问题也可能在http://whitenoise.evans.io/en/stable/django.html#storage-troubleshoot 中突出显示
小智 7
我有一个热闹的故事.到达这个页面后,我说"尤里卡!我得救了.那一定是我的问题." 所以我ALLOWED_HOSTS在setting.py中插入了所需的列表,并且......没有.相同的旧500错误.不,它不是因为缺少404.html文件.
因此,在2天的时间里,我忙于疯狂的理论,例如它与服务静态文件有关(理解我是菜鸟,而且新手不知道他们在做什么).
那是什么?现在是主持人,我们得到了一个有用的提示.虽然我的开发Django是版本1.5.something,我的生产服务器版本是1.5.something + 1 ...或者可能加上2.无论如何.所以在我添加ALLOWED_HOSTS到桌面版本的settings.py之后,缺少hwjp所要求的 - 一个"settings.py中的默认值,也许带有解释性注释"---我在生产服务器上做了同样的事情适当的域名.
但我没注意到在生产服务器上使用更高版本的Django,在settings.py中有一个带有解释性注释的默认值.它远远低于我进入的地方,在显示器上看不到.当然,这份清单是空的.因此我浪费时间.
对于它的价值 - 我DEBUG = False只在某些页面上获得了500 .用pdb追溯异常显示缺少资产(我怀疑{% static ... %}模板标签是500的罪魁祸首.
补充主要答案在开发和生产之间切换时
更改ALLOWED_HOSTS和DEBUG全局常量很烦人settings.py.我正在使用此代码自动设置这些设置:
import socket
if socket.gethostname() == "server_name":
DEBUG = False
ALLOWED_HOSTS = [".your_domain_name.com",]
...
else:
DEBUG = True
ALLOWED_HOSTS = ["localhost", "127.0.0.1",]
...
Run Code Online (Sandbox Code Playgroud)
如果您使用macOS,您可以编写更通用的代码:
if socket.gethostname().endswith(".local"): # True in your local computer
DEBUG = True
ALLOWED_HOSTS = ["localhost", "127.0.0.1",]
else:
...
Run Code Online (Sandbox Code Playgroud)
小智 6
我知道这是一个非常古老的问题,但也许我可以帮助其他人。如果您在设置 DEBUG=False 后遇到 500 错误,您始终可以在命令行中运行 manage.py runserver 来查看不会出现在任何 Web 错误日志中的任何错误。
我做的时候遇到了同样的问题DEBUG = FALSE.这是一个综合解决方案,分散在上面和其他帖子的答案中.
默认情况下,在settings.py中我们有ALLOWED_HOSTS = [].以下是ALLOWED_HOSTS根据场景可能需要进行的更改,以消除错误:
1:您的域名:
ALLOWED_HOSTS = ['www.example.com'] # Your domain name here
Run Code Online (Sandbox Code Playgroud)
2:如果您还没有域名,那么您已部署的服务器IP(这是我的情况并且像魅力一样工作):
ALLOWED_HOSTS = ['123.123.198.123'] # Enter your IP here
Run Code Online (Sandbox Code Playgroud)
3:如果您在本地服务器上进行测试,则可以编辑您的settings.py或settings_local.py:
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
Run Code Online (Sandbox Code Playgroud)
4:您还可以在ALLOWED_HOSTS值中提供"*",但出于安全原因,不建议在生产环境中使用它:
ALLOWED_HOSTS = ['*'] # Not recommended in production environment
Run Code Online (Sandbox Code Playgroud)
我还在我的博客上发布了一个您可能想要参考的详细解决方案.
ALLOWED_HOSTS并不是唯一的问题,对我而言,我必须创建一个404.html并将其放在模板的基本级别(而非应用程序级别)中-另外,您可以创建404视图并添加404handler网址,但我认为可选的。404.html修复了它
在mainproject.urls中
handler404 = 'app.views.custom_404'
Run Code Online (Sandbox Code Playgroud)
在app.views中
def custom_404(request):
return render(request, '404.html', {}, status=404)
Run Code Online (Sandbox Code Playgroud)
然后制作一个template / 404.html模板
是从另一个S / O帖子获得的,我找不到它
编辑
同样,当我为带有白噪声的资产提供服务时,会出现500个错误。无法弄清楚我的一生,错误是whitenoise的ValueError无法找到我也找不到的资产,现在必须使用默认的Django服务
小智 5
我正在搜索和测试有关此问题的更多信息,我意识到在settings.py中指定的静态文件目录可能是导致此问题的原因,因此,首先,我们需要运行此命令
python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)
在settings.py中,代码应如下所示:
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124868 次 |
| 最近记录: |