[英]Server Error 500 when DEBUG=False
I am trying to deploy a web application to Heroku using Django.我正在尝试使用 Django 将 Web 应用程序部署到 Heroku。 I can run the app locally just fine, but when I try to load it up live with DEBUG = False
, I get a server 500 error.我可以在本地运行应用程序就好了,但是当我尝试使用DEBUG = False
实时加载它时,我收到服务器 500 错误。 If I change the settings to DEBUG = True
, it works.如果我将设置更改为DEBUG = True
,它会起作用。 I would appreciate any help.我将不胜感激任何帮助。
EDIT: I found a thread that helped me get an email version of the error, which is Missing staticfiles manifest entry for 'home/css/bootswatch.css'
.编辑: 我发现一个线程帮助我获得了错误的电子邮件版本,即Missing staticfiles manifest entry for 'home/css/bootswatch.css'
。 So now my concern is that the static files are not configured properly but I don't know how to fix them.所以现在我担心的是静态文件没有正确配置,但我不知道如何修复它们。 I am using this default django/heroku template with collectstatic
disabled - I had to do this in order to even get the app to deploy.我正在使用禁用collectstatic
默认 django/heroku 模板- 我必须这样做才能部署应用程序。 Could this be the issue?这可能是问题吗? I can't remember the exact command I had to run, but basically heroku told me it could not deploy the app until I disabled collectstatic
.我不记得我必须运行的确切命令,但基本上 heroku 告诉我它无法部署应用程序,直到我禁用collectstatic
。
*NEW EDIT: Thanks to this thread , I realized I had to remove my disabled collectstatic config var, then try to build again. *新编辑: 多亏了这个线程,我意识到我必须删除禁用的 collectstatic 配置变量,然后再次尝试构建。 Didn't work.没用。 Error led me to realize that the default static file that comes with the starter template has to be INSIDE the settings MODULE.错误让我意识到启动模板附带的默认静态文件必须在设置模块内。 Did that, pushed - still didn't work.这样做了,推了 - 仍然没有用。 The traceback showed me that there was something wrong with my font-awesome css file.回溯显示我的字体很棒的 css 文件有问题。 Deleted the file, added a CDN instead, pushed, and boom.删除了文件,改为添加了 CDN,推送和繁荣。 Site works.网站工作。 I hope this is helpful to someone else in the future.我希望这对未来的其他人有帮助。
Error log错误日志
2017-10-08T19:33:03.000000+00:00 app[api]: Build started by user me@email.com
2017-10-08T19:33:19.148973+00:00 heroku[web.1]: Restarting
2017-10-08T19:33:19.149620+00:00 heroku[web.1]: State changed from up to starting
2017-10-08T19:33:19.717815+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2017-10-08T19:33:19.732436+00:00 app[web.1]: [2017-10-08 19:33:19 +0000] [4] [INFO] Handling signal: term
2017-10-08T19:33:19.732487+00:00 app[web.1]: [2017-10-08 19:33:19 +0000] [8] [INFO] Worker exiting (pid: 8)
2017-10-08T19:33:19.732716+00:00 app[web.1]: [2017-10-08 19:33:19 +0000] [9] [INFO] Worker exiting (pid: 9)
2017-10-08T19:33:19.833095+00:00 app[web.1]: [2017-10-08 19:33:19 +0000] [4] [INFO] Shutting down: Master
2017-10-08T19:33:20.012423+00:00 heroku[web.1]: Process exited with status 0
2017-10-08T19:33:18.676112+00:00 app[api]: Release v30 created by user me@email.com
2017-10-08T19:33:18.676112+00:00 app[api]: Deploy 8f625678 by user me@email.com
2017-10-08T19:33:03.000000+00:00 app[api]: Build succeeded
2017-10-08T19:33:29.936137+00:00 heroku[web.1]: Starting process with command `gunicorn portfolio.wsgi`
2017-10-08T19:33:32.419548+00:00 app[web.1]: [2017-10-08 19:33:32 +0000] [4] [INFO] Starting gunicorn 19.6.0
2017-10-08T19:33:32.420072+00:00 app[web.1]: [2017-10-08 19:33:32 +0000] [4] [INFO] Listening at: http://0.0.0.0:23534 (4)
2017-10-08T19:33:32.420207+00:00 app[web.1]: [2017-10-08 19:33:32 +0000] [4] [INFO] Using worker: sync
2017-10-08T19:33:32.424142+00:00 app[web.1]: [2017-10-08 19:33:32 +0000] [8] [INFO] Booting worker with pid: 8
2017-10-08T19:33:32.523409+00:00 app[web.1]: [2017-10-08 19:33:32 +0000] [9] [INFO] Booting worker with pid: 9
2017-10-08T19:33:33.592588+00:00 heroku[web.1]: State changed from starting to up
2017-10-08T19:33:33.991800+00:00 heroku[router]: at=info method=GET path="/" host=myproject.herokuapp.com request_id=89d87c81-0ab1-4b
2e-8705-43ef55710082 fwd="my.public.ip.address" dyno=web.1 connect=0ms service=225ms status=500 bytes=234 protocol=https
2017-10-08T19:33:36.569500+00:00 heroku[router]: at=info method=GET path="/" host=myproject.herokuapp.com request_id=cb8ea686-89ba-44
0f-8e66-0c3258c2de92 fwd="my.public.ip.address" dyno=web.1 connect=0ms service=42ms status=500 bytes=234 protocol=https
Folder structure:文件夹结构:
__ init __.py __ 初始化 __.py
from .base_settings import *
from .production_settings import *
try:
from .local_settings import *
except:
pass
base_settings.py base_settings.py
import os, dj_database_url
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
DEBUG = ""
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
# Disable Django's own staticfiles handling in favour of WhiteNoise, for
# greater consistency between gunicorn and `./manage.py runserver`. See:
# http://whitenoise.evans.io/en/stable/django.html#using-whitenoise-in-development
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
'app ',
'app',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'project.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
'debug': DEBUG,
},
},
]
WSGI_APPLICATION = 'project.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Change 'default' database configuration with $DATABASE_URL.
DATABASES['default'].update(dj_database_url.config(conn_max_age=500))
# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# Allow all host headers
ALLOWED_HOSTS = ['myproject.herokuapp.com', 'localhost']
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'
# Extra places for collectstatic to find static files.
STATICFILES_DIRS = [
os.path.join(PROJECT_ROOT, 'static'),
]
# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
local_settings.py local_settings.py
from .base_settings import *
SECRET_KEY = 'mysecretkey'
DEBUG = True
production_settings.py生产设置.py
from .base_settings import *
SECRET_KEY = os.environ.get('SECRET_KEY')
DEBUG = False
The only problem I know of that kicks in when DEBUG = False
is the ALLOWED_HOSTS
setting.当DEBUG = False
时,我知道的唯一问题是ALLOWED_HOSTS
设置。 With DEBUG off Django will check your host name against the list and will reject the request if the host is not on the allowed list.关闭调试后,Django 将根据列表检查您的主机名,如果主机不在允许列表中,则拒绝请求。
It usually results in a 400 but can give a 500 if further problems are encountered: Django allowed hosts with port number它通常会导致 400,但如果遇到进一步的问题,可以给出 500: Django allowed hosts with port number
Thanks to this thread , I realized I had to remove my disabled collectstatic config var, then try to build again. 感谢这个线程,我意识到我必须删除禁用的 collectstatic 配置变量,然后再次尝试构建。 Didn't work.没用。 Error led me to realize that the default static file that comes with the starter template has to be INSIDE the settings MODULE.错误让我意识到启动模板附带的默认静态文件必须在设置模块内。 Did that, pushed - still didn't work.这样做了,推了 - 仍然没有用。 The traceback showed me that there was something wrong with my font-awesome css file.回溯显示我的字体很棒的 css 文件有问题。 Deleted the file, added a CDN instead, pushed, and boom.删除了文件,改为添加了 CDN,推送和繁荣。 Site works.网站工作。 I hope this is helpful to someone else in the future.我希望这对未来的其他人有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.