将 Django 部署到 Heroku(Psycopg2 错误)
Posted
技术标签:
【中文标题】将 Django 部署到 Heroku(Psycopg2 错误)【英文标题】:Deploying Django to Heroku (Psycopg2 Error) 【发布时间】:2012-05-22 17:42:42 【问题描述】:所以我正在关注 heroku 和 django 的入门指南。但是,当我运行此命令时:
heroku run python manage.py syncdb
我收到此错误
psycopg2.OperationalError: could not connect to server: Connection refused
Is the server running on host "localhost" and accepting
TCP/IP connections on port 5432?
我认为这意味着数据库尚未设置...所以我也手动添加了 shared_db 选项:
heroku addons:add shared-database:5mb
但是.. 我仍然遇到同样的错误。什么给了?
【问题讨论】:
如果这是一般问题或特定于 Django,您可以尝试使用简单的脚本进行手动连接吗? 遇到同样的问题,请问你最后解决了吗? 【参考方案1】:已编辑:
正如@mipadi 在这里指出的那样 (http://***.com/questions/13001031/django-heroku-settings-injection/13092534),它实际上可以像这样简单:
import dj_database_url
DATABASES = 'default' : dj_database_url.config()
如果您设置了 DATABASE_URL 环境变量,则此方法有效。 heroku:pg_promote 让你在那里。详情如下
确保你的 Heroku 上有 Postgres
heroku addons:add heroku-postgresql:dev
第 1 步:找出您的数据库网址
heroku config | grep POSTGRESQL
输出将如下所示:
HEROKU_POSTGRESQL__URL: postgres://user:password@host:5432/blabla
第 2 步:获取上一步中的设置名称(例如 HEROKU_POSTGRESQL_ROSE_URL)并将其放入您的设置文件中,如下所示
DATABASES = 'default': dj_database_url.config(default=os.environ["HEROKU_POSTGRESQL_ROSE_URL"])
[更新] 正如 Ted 所指出的,有一种方法可以将颜色 URL 提升为 DATABASE_URL 变量:
heroku pg:promote HEROKU_POSTGRESQL_ROSE_URL
然后您的数据库设置可以使用 DATABASE_URL 而不是更具异国情调的彩色 URL
DATABASES = 'default': dj_database_url.config(default=os.environ["DATABASE_URL"])
鲍勃是你的叔叔
【讨论】:
对于那些还在为 Heroku + Django 苦苦挣扎的人,我整理了一个样板来快速上手。非常固执,但它完成了工作:github.com/callmephilip/django-heroku-bootstrap【参考方案2】:我自己通过将以下代码添加到 settings.py 来使其工作,似乎由于某种原因 Heroku 没有为我添加它....
通常它总是在 Heroku 上动态添加代码,但我猜在 django 1.4 之后它出于某种原因不再这样做了。或者我只是做错了什么。
无论如何,这只是将其附加到您的 settings.py 的代码,它应该像以前一样工作。
import sys
import urlparse
import os
# Register database schemes in URLs.
urlparse.uses_netloc.append('postgres')
urlparse.uses_netloc.append('mysql')
try:
# Check to make sure DATABASES is set in settings.py file.
# If not default to
if 'DATABASES' not in locals():
DATABASES =
if 'DATABASE_URL' in os.environ:
url = urlparse.urlparse(os.environ['DATABASE_URL'])
# Ensure default database exists.
DATABASES['default'] = DATABASES.get('default', )
# Update with environment configuration.
DATABASES['default'].update(
'NAME': url.path[1:],
'USER': url.username,
'PASSWORD': url.password,
'HOST': url.hostname,
'PORT': url.port,
)
if url.scheme == 'postgres':
DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2'
if url.scheme == 'mysql':
DATABASES['default']['ENGINE'] = 'django.db.backends.mysql'
except Exception:
print 'Unexpected error:', sys.exc_info()
【讨论】:
我仍在运行 django 1.3.1... 支持可能的 1.4 解决方案 :) 你试过了吗?它也可能适用于 1.3,它可能与使用 Shared DB 而不是 Dev DB 有关,但无法验证。我认为这也可以解决您的问题。【参考方案3】:我的应用程序结构已关闭...heroku 希望结构看起来像这样:
toplevel
requirements.txt
myapp
manage.py
all other django stuff
【讨论】:
【参考方案4】:我遇到了同样的问题,我就是这样解决的
Step1:按照Phillip的Step 1获取数据库名称(颜色)
第二步:
$ heroku pg:promote HEROKU_POSTGRESQL_<COLOR>
导致输出
Promoting HEROKU_POSTGRESQL_<COLOR> to DATABASE_URL... done
【讨论】:
非常好,泰德。我会在我原来的答案中加入这一点【参考方案5】:您需要将此添加到您的 requirements.txt:
psycopg2
Heroku 默认配置一个 Postgres 数据库并将代码注入您的 settings.py (https://devcenter.heroku.com/articles/django#postgres_database_config)。这从环境变量 DATABASE_URL 中读取,但确实需要安装 psycopg2。
【讨论】:
这存在于我的 requirements.txt 文件中,请遵循以下设置说明:devcenter.heroku.com/articles/django以上是关于将 Django 部署到 Heroku(Psycopg2 错误)的主要内容,如果未能解决你的问题,请参考以下文章
将 Cookiecutter-Django 应用程序部署到 Heroku 时出错
由于 PyWin32,无法将 Django 应用程序部署到 Heroku
Foreman start 找不到 Procfile,将 Django 应用程序部署到 Heroku