繁体   English   中英

尝试在 heroku 上使用 DEBUG=False 部署 django 应用程序时出现服务器错误 (500)

[英]Server error (500) when trying to deploy django app with DEBUG=False on heroku

我正在尝试在 heroku 上部署 django 应用程序。 当 DEBUG 变量为 False 时,我收到服务器错误 (500)。 当 DEBUG 为 True 时,一切正常。 如何解决这个问题呢? 以下是一些日志:

2021-08-17T10:15:08.603841+00:00 app[web.1]: 10.1.59.205 - - [17/Aug/2021:10:15:08 +0000] "GET /connexion?next=/ HTTP/1.1" 500 145 "-" "Mozilla/5.0 (Windows NT 10.0;
Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67"
2021-08-17T10:15:08.603943+00:00 heroku[router]: at=info method=GET path="/connexion?next=/" host=pnl-testapi.herokuapp.com request_id=edc211c1-244d-49ad-aac6-6e2c1d9
cf5c0 fwd="160.119.178.105" dyno=web.1 connect=0ms service=63ms status=500 bytes=403 protocol=https

您是否在 settings.py 的 ALLOWED_HOSTS 变量中添加了您的域?

ALLOWED_HOSTS = ['.herokuapp.com']

编辑:您已经添加了网络服务器的访问日志,请同时添加例外。 您是否尝试在本地运行您的项目,以便快速轻松地访问控制台?

修复了在 Heroku 上尝试使用 DEBUG=False 部署 django 应用程序时的服务器错误 (500)

pip 安装白噪声

编辑您的settings.py文件并将 WhiteNoise 添加到 MIDDLEWARE 列表中,高于除 Django 的 SecurityMiddleware 之外的所有其他中间件:

MIDDLEWARE = [
  # 'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',
  # ...
]

如果您安装django-heroku ,请尝试将其注释掉,并将django_heroku.settings(locals())注释掉。

您可以将DEBUG = False并重新部署到 Heroku。 这种方法实际上对我有用。 你可以试一试。

您还可以阅读whitenoise文档: http : whitenoise

根据经验,此错误是由于 3 件事而产生的:

1.- 您没有定义 static 文件目录的路径

2.- 你没有指定 ALLOWED_HOST

3.- 你没有安装白噪声


要解决这个问题,您必须在 Python 中安装 whitenoise 和 django-heroku:

pip 安装白噪声

pip 安装 django-heroku


并将其添加到您的 settings.py 中:

import django_heroku # import django-heroku


ALLOWED_HOSTS = ['*'] # add your host(s)

# Add whitenoise in MIDDLEWARE
MIDDLEWARE = [
    ...
    'whitenoise.middleware.WhiteNoiseMiddleware', # add this
]

# Add your paths for static files
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' # add this

django_heroku.settings(locals()) # add this

有了这个,你需要写:

heroku 配置:设置 DISABLE_COLLECTSTATIC=0

通过这种方式 heroku 将能够识别您的 static 文件目录。


似乎 heroku 需要参考 static 文件目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM