我最近在Heroku上放了一个Django应用程序。主页看起来不错,但是当我尝试转到涉及进行查询的页面时(例如p = Photo.objects.get(title=title)
),我收到此错误:
could not connect to server: Connection refused
Is the server running on host "localhost" and accepting
TCP/IP connections on port 5432?
根据this answer,我做了$ heroku pg:promote HEROKU_POSTGRESQL_GREEN_URL
然后在我的settings.py中:
DATABASES = {'default': dj_database_url.config(default=os.environ['DATABASE_URL'])}
仍然遇到同样的错误,所以我尝试查看结果(如this answer建议的那样):
$ heroku run python manage.py shell
>>> from django.conf import settings
>>> print settings.DATABASES['default']
{'TIME_ZONE': 'UTC', 'TEST_MIRROR': None, 'NAME': 'snorthway', 'OPTIONS': {},
'HOST': 'localhost', 'TEST_NAME': None, 'PASSWORD': '******', 'ENGINE':
'django.db.backends.postgresql_psycopg2', 'PORT': '', 'USER': 'snorthway',
'TEST_COLLATION': None, 'TEST_CHARSET': None}
此时我意识到我不知道我应该在那里寻找什么。我仍然不明白错误的含义,所以我不确定如何调试它。
答案 0 :(得分:2)
您尚未在settings.py中正确配置django数据库。它认为您的数据库在localhost上。听起来你有一个heroku postgres数据库,所以你的主机应该是这样的:
df3-64-304-50-250.compute-1.amazonaws.com
Heroku通过名为:
的环境变量公开特殊的数据库URLDATABASE_URL
这里有一个非常酷的python包,名为dj_database_url:https://github.com/kennethreitz/dj-database-url它将该环境变量转换为django所期望的。
您可以使用以下方式安装:
$ pip install dj-database-url
我在settings.py中使用以下内容
import dj_database_url
DATABASES = {
'default': dj_database_url.config()
}