【问题标题】:Deploying Django To Heroku - Server Error (500)将 Django 部署到 Heroku - 服务器错误 (500)
【发布时间】:2017-10-28 12:47:18
【问题描述】:

我一直在制作一个 django 应用程序,现在正在尝试将其部署到 heroku。 但是当我继续它时,说Server Error (500),日志说:2017-05-27T21:00:14.634310+00:00 heroku[router]: at=info method=GET path="/" host=remberit.herokuapp.com request_id=065d27c6-9211-458f-9fc6-bb677d43581e fwd="86.13.204.65" dyno=web.1 connect=0ms service=151ms status=500 bytes=387 protocol=https

这是我的 settings.py(至少是相关部分,但请询问您是否想要其余部分):

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

STATIC_ROOT = os.path.join(PROJECT_ROOT, "staticfiles")
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

import dj_database_url

DATABASES['default'] = dj_database_url.config()

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

ALLOWED_HOSTS = ['*']

DEBUG = False

try:
    from .local_settings import *
except ImportError:
    pass

这是我的 wsgi.py:

import os

from django.core.wsgi import get_wsgi_application
#from whitenoise.django import DjangoWhiteNoise
import django

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'remberit.settings')
django.setup()

application = get_wsgi_application()
#application = DjangoWhiteNoise(application)

这是我的 Procfile:

web: gunicorn remberit.wsgi

这是我的 runtime.txt:

python-3.5.2

这是我的 requirements.txt:

appdirs==1.4.3
dj-database-url==0.4.2
gunicorn==19.7.1
packaging==16.8
pyparsing==2.2.0
six==1.10.0
whitenoise==3.3.0
psycopg2==2.6.2

这是pip freeze的输出:

appdirs==1.4.3
dj-database-url==0.4.2
gunicorn==19.7.1
packaging==16.8
pyparsing==2.2.0
six==1.10.0
whitenoise==3.3.0

另外,当我使用 gunicorn remberit.wsgipython manage.py runserver 在本地运行应用程序时,它可以正常工作,但只有在我使用 heroku 时它才不起作用。

如果您需要更多信息,请告诉我。

【问题讨论】:

  • 我遇到了类似的问题。如果您找到了解决方案,请告诉我。

标签: python django heroku


【解决方案1】:

可能解决您的问题的其他解决方案:注释掉或从 whitenoise 中删除 GzipManifestStaticFilesStorage。由于某种原因,这不能很好地工作。

# STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

Why would django fail with server 500 only when Debug=False AND db is set to production database on Heroku?找到这个解决方案

【讨论】:

    【解决方案2】:

    正如mustapha-belkacim 所说,您需要迁移您的应用程序:

    heroku run python manage.py migrate
    

    【讨论】:

    • 即使我们不使用数据库也必须这样做
    【解决方案3】:

    当我第一次将我的应用程序部署到 heroku 时,我遇到了类似的问题,在我的情况下,它是需要迁移的数据库。所以我不得不运行这个命令:

    heroku run -a your-app-name python manage.py migrate
    

    看看这个教程https://devcenter.heroku.com/articles/getting-started-with-python#provision-a-database

    【讨论】:

    • 这可行,但在我的情况下,我需要先恢复迁移并再次应用它们。即:heroku run -a app-name python manage.py migrate zero,然后是答案中的命令。
    【解决方案4】:

    请在设置中提供(或检查)您的 TEMPLATES 变量。确保“DIRS”值指向 index.html(或基本模板)所在的正确模板文件夹。

    我遇到了类似的错误,这就是我的问题。

    正如在其他问题 (Django app deployed to Heroku producing Server error 500) 中所评论的那样,我在生产中将 DEBUG 设置为 True 片刻后才意识到这一点,以便在该问题上找到更好的帮助。然后,当然回到 False。

    您的 /admin 是否有效?如果是这样,这个答案可能会对您有所帮助。如果没有,有很多事情可能会出错,也许其他人可以提供帮助? (例如:如果 pip freeze 存在于 requirements.txt 中,为什么 psycopg2 没有输出?它安装了吗?你在本地和生产环境中都使用 postgreSQL 吗?)

    【讨论】:

    • 好电话。我将 DEBUG 设置为 True 片刻,立即发现了问题。
    【解决方案5】:

    我也遇到了同样的问题,所以最好和最快的解决方案是删除这一行:

    STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

    并添加:

    STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'

    【讨论】:

      【解决方案6】:

      确保您没有链接任何不存在的外部文件,例如在我的情况下,我的 html 链接的 css 文件很少,但实际文件已被删除。

      【讨论】:

        【解决方案7】:

        500 错误可能有很多可能。暂时设置 DEBUG=True 以获取更多信息。

        【讨论】:

          猜你喜欢
          • 2019-07-20
          • 1970-01-01
          • 2019-12-01
          • 2020-07-16
          • 2018-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多