服务器错误(500)heroku 上的 Django 部署
Posted
技术标签:
【中文标题】服务器错误(500)heroku 上的 Django 部署【英文标题】:Server error (500) Django deployment on heroku 【发布时间】:2018-12-30 03:53:07 【问题描述】:我在我的 settings.py 文件中将 debug 设置为 False(请注意,在我将其设置为 false 之前,一切正常),当我运行 git push heroku master
并访问我的网站时,主页正在运行,但那是我的所有页面都不是这样:在某些页面上,我收到错误消息 Server Error (500)
这是我的settings.py
代码:
DEBUG = False
ALLOWED_HOSTS = ["hacka-labs.herokuapp.com"]
我注意到我传递 id 的网址不起作用
如果你知道答案,请帮助我
【问题讨论】:
可能有些页面需要静态文件或者想从db读取数据,而你没有访问权限 我认为这不是问题,因为在我将 DEBUG 设置为 False 之前一切正常。 你在urls.py文件中定义了静态路由吗? 没有。我真的必须这样做吗? 【参考方案1】:我遇到了类似的问题,很难弄清楚 DEBUG 何时设置为 False。当我将它重新配置回DEBUG = True
时,一切都恢复正常了。所以问题是
您通常不会在开发中看到此错误,因为当
DEBUG = True
时,ManifestStaticFilesStorage 切换到非散列 URL。 https://***.com/a/51060143/7986808
您的问题的解决方案可能与我的不同。但是你可以通过改变你的Django项目的日志记录方法来发现问题,这样即使在DEBUG = False
模式下运行heroku logs -t -a <heroku-app>
时,你也可以在命令行中看到更多信息。
在settings.py
中更改您的 django 日志记录设置,如下所示:
LOGGING =
'version': 1,
'disable_existing_loggers': False,
'formatters':
'verbose':
'format': ('%(asctime)s [%(process)d] [%(levelname)s] '
'pathname=%(pathname)s lineno=%(lineno)s '
'funcname=%(funcName)s %(message)s'),
'datefmt': '%Y-%m-%d %H:%M:%S'
,
'simple':
'format': '%(levelname)s %(message)s'
,
'handlers':
'null':
'level': 'DEBUG',
'class': 'logging.NullHandler',
,
'console':
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
,
'loggers':
'django':
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
,
'django.request':
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
,
然后运行heroku logs -t -a <heroku-app>
并打开您之前收到500 错误的网址,您将在日志中发现问题。希望这会对你有所帮助。
如果缺少一些静态文件,只需在settings.py
中切换您的静态根目录,如下STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
。运行 heroku run python manage.py collectstatic -a <heroku-app>
会创建 staticfiles 目录。
【讨论】:
还需要加上django_heroku.settings(config=locals(), staticfiles=False,logging=False)
logging =False【参考方案2】:
我有同样的错误。
我通过删除settings.py
中的import django heroku
解决了问题
【讨论】:
import django_heroku django_heroku.settings(locals())
参考:pypi.org/project/django-heroku【参考方案3】:
我在 heroku 上部署 react 和 django 项目时遇到了同样的错误。 我已经调试了 2 天,做了所有的事情,比如允许的主机、静态文件、json、白噪声,但仍然没有解决问题。
如果您的浏览器抛出错误 500,则在 settings.py
中设置 DEBUG=True
。如果它在 index.html 处引发 TemplateDoesNotExist 错误,那么更改 views.py 可能有助于解决该问题。部署前别忘了设置DEBUG=False
。
我通过更改views.py中的一些代码解决了这个问题。
def index(request):
return render(request,'ur_app_name.html')
到
def index(request):
some_variable_name=TemplateResponse(request,'ur_app_name.html',)
return some_variable_name
别忘了在views.py上导入这个
from django.template.response import TemplateResponse
我不知道我到底遇到了什么问题,我猜这是一个 httpResponse 的事情,因为服务器需要 http 请求,而我们的本地机器不需要它。
这个错误的一些关键点:
-
确保在
settings.py
文件中的 ALLOWED_HOST
中提及您的域名
设置STATIC_ROOT=os.path.join(BASE_DIR, 'staticfiles')
in settings.py
,当heroku抛出一个
collecticstatic
错误,但我不确定。如果它仍然抛出
同样的错误然后在命令上禁用collectstatic=1
(你可以找到
调试日志中的确切命令)不会创建
任何问题。
在settings.py
中设置whitenoise.middleware.WhiteNoiseMiddleware
,在MIDDLEWARE
中,这可能会有所帮助。
如果您的项目使用 react 和 django,则仅在 heroku 上添加构建包时选择 python。不要选择 node.js。
这是github repository 我上传我的heroku项目的地方,你可以在这里找到配置文件,这可能会有所帮助。
如果您的项目使用 react 和 django 及以上建议没有帮助,这可能会有所帮助:
检查.gitignore
文件,安装所有requirement.txt
文件
并将package.json
文件复制到根目录。
设置"build": "cd <project folder name>&& react-scripts build"
,在package.json
的脚本中
我的 index.html 和 manifest.json 在上面提到的 github repo 中。
“staticfiles”目录是使用“$python manage.py collectstatic
”在根文件夹中创建的。如果您的项目没有,请尝试复制我的index.html
文件。
就是这样。
herokuapp 链接:https://sainterface.herokuapp.com/
【讨论】:
以上是关于服务器错误(500)heroku 上的 Django 部署的主要内容,如果未能解决你的问题,请参考以下文章
Gin Gonic 和 Qor Admin 的问题:heroku 上的错误 500
Heroku 在信息很少的情况下给出 500 错误 + 内部服务器错误
在 Heroku 服务器上部署 Django 错误 (500) - 据说是静态文件问题
Django Admin 在生产 Heroku 中引发 500 错误
每当 django 中的 debug=False 时,Heroku 都会给出服务器错误(500),而当 debug=True 时没有错误
使用 Django 在 Heroku 上接收带有图像的特定页面的服务器错误 500(由 WhiteNoise 提供静态服务)