【问题标题】:Server error (500) Django deployment on heroku服务器错误(500)heroku 上的 Django 部署
【发布时间】: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文件中定义了静态路由吗?
  • 没有。我真的必须这样做吗?

标签: python django heroku django-settings server-error


【解决方案1】:

我遇到了类似的问题,很难弄清楚 DEBUG 何时设置为 False。当我将它重新配置回DEBUG = True 时,一切都恢复正常了。所以问题是

您通常不会在开发中看到此错误,因为当 DEBUG = True 时,ManifestStaticFilesStorage 切换到非散列 URL。 https://stackoverflow.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 解决了问题

【讨论】:

【解决方案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 请求,而我们的本地机器不需要它。

这个错误的一些关键点:

  1. 确保在 settings.py 文件中的 ALLOWED_HOST 中提及您的域名
  2. 设置STATIC_ROOT=os.path.join(BASE_DIR, 'staticfiles')in settings.py,当heroku抛出一个 collecticstatic 错误,但我不确定。如果它仍然抛出 同样的错误然后在命令上禁用collectstatic=1(你可以找到 调试日志中的确切命令)不会创建 任何问题。
  3. settings.py 中设置whitenoise.middleware.WhiteNoiseMiddleware,在MIDDLEWARE 中,这可能会有所帮助。
  4. 如果您的项目使用 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/

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 1970-01-01
    • 2017-10-28
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多