【问题标题】:OperationalError could not connect to serverOperationalError 无法连接到服务器
【发布时间】:2013-07-12 05:53:05
【问题描述】:

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

此时我意识到我什至不知道我应该在其中寻找什么。我仍然不明白错误是什么意思,所以我不确定如何调试它。

【问题讨论】:

  • 你能从shell查询数据库吗?比如导入模型然后运行 ​​p = Photo.objects.get(title=title) ?
  • 不,当我导入模型并运行 print Photo.objects.all() 之类的东西时,我遇到了同样的错误。
  • 当您运行heroku config 时,您是否在配置变量列表中看到DATABASE_URL?此外,您不应该需要 default= 部分;我认为应该只是dj_database_url.config(os.environ['DATABASE_URL'])
  • @snorthway 尝试将 HOST 的值从 localhost 更改为 127.0.0.1

标签: django heroku-postgres


【解决方案1】:

你没有在 settings.py 中正确配置你的 django 数据库。它认为您的数据库位于本地主机上。听起来你有一个 heroku postgres 数据库,所以你的主机应该是这样的:

df3-64-304-50-250.compute-1.amazonaws.com

Heroku 通过一个名为的环境变量公开一个特殊的数据库 URL:

DATABASE_URL

这里有一个非常酷的 python 包,名为 dj_database_url:https://github.com/kennethreitz/dj-database-url 它将环境变量转换为 django 所期望的。

你可以安装它:

$pip 安装 dj-database-url

我在我的 settings.py 中使用以下内容

import dj_database_url
DATABASES = {
    'default': dj_database_url.config()
}

【讨论】:

  • 谢谢。你的回答救了我的命!
猜你喜欢
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
相关资源
最近更新 更多