操作错误:无法连接到服务器。

8

最近我在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?

根据这个答案的建议,我执行了$ heroku pg:promote HEROKU_POSTGRESQL_GREEN_URL。然后在我的settings.py文件中进行如下设置:DATABASES = {'default': dj_database_url.config(default=os.environ['DATABASE_URL'])}。仍然出现相同的错误,因此我按照这个答案的建议查看了结果。
$ 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}

我当时意识到我甚至不知道该在什么地方查找。我仍然不理解这个错误的含义,因此我不确定应该如何进行调试。


你能否从shell中查询数据库?比如导入你的模型,然后运行p = Photo.objects.get(title=title)? - carl-lopez
不行,当我导入模型并运行像 print Photo.objects.all() 这样的代码时,我得到了相同的错误。 - snorthway
当您运行 heroku config 命令时,您是否在配置变量列表中看到了 DATABASE_URL?此外,您不需要 default= 部分;我认为它应该只是 dj_database_url.config(os.environ['DATABASE_URL']) - jacobian
@snorthway 尝试将 HOST 的值从 localhost 更改为 127.0.0.1 - DoNotArrestMe
1个回答

3
您没有在settings.py中正确配置django数据库。它认为您的数据库位于本地主机上。听起来像是你有一个Heroku Postgres数据库,所以你的主机应该是这样的:
df3-64-304-50-250.compute-1.amazonaws.com
Heroku通过环境变量DATABASE_URL公开了一个特殊的数据库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()
}

谢谢。你的回答救了我的命! - Henry Zhu

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