将Django部署到Heroku - 服务器错误(500)

8
我正在制作一个Django应用程序,并尝试将其部署到Heroku。但是当我访问时,它显示“服务器错误(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时不能正常工作。
请告诉我是否需要更多信息。

我也遇到了类似的问题。如果你找到了解决方案,请告诉我。 - uitwaa
8个回答

10

另一个可能解决您问题的解决方案是:将GzipManifestStaticFilesStorage从whitenoise中注释或删除。由于某种原因,这不起作用。

# STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

在Heroku上当Debug=False且db被设置为生产数据库时,Django出现服务器500错误的问题可以参考此解决方案

8
mustapha-belkacim 所说,您需要迁移您的应用程序:
heroku run python manage.py migrate

我们即使不使用数据库,也必须执行这个操作吗? - Arjun
@Arjun 如果您拥有管理员页面或超级用户,则需要一个数据库。 - gabriel

3

这个方法是可行的,但在我的情况下,我需要先回滚迁移,然后再应用它们。也就是说:heroku run -a app-name python manage.py migrate zero 然后执行答案中的命令。 - ahmadkarimi12

2

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

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

并添加这一行:

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


2
请提供(或检查)来自设置的TEMPLATES变量。确保'DIRS'值指向正确的模板文件夹,其中包含index.html(或基本模板)。
我遇到了类似的错误,这在我的情况下是问题所在。
如其他问题中所评论的一样(Django app deployed to Heroku producing Server error 500),在生产环境中将DEBUG设置为True以寻求更好的帮助之后,我意识到了这一点。然后,当然要切回False。
你的/admin工作吗?如果是,这个答案可能会对你有所帮助。如果不是,有很多事情可能出错,也许其他人可以帮忙?(例如:如果你在requirements.txt中有psycopg2,为什么pip freeze没有输出它?它是否安装了?你是在本地和生产环境都使用postgreSQL吗?)

干得好。我把DEBUG调成True,立刻看到了问题所在。 - bradleygsmith

1

500错误可能有很多可能的原因。暂时将DEBUG设置为True以获取更多信息。


0

我遇到了同样的问题,但当我将settings.py中的Debug选项设置为false时,网站就能正常运行了。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接