Python 将Django部署到Heroku(Psycopg2错误)
因此,我将与django一起学习heroku的入门指南。但是,当我运行此命令时:Python 将Django部署到Heroku(Psycopg2错误),python,django,postgresql,deployment,heroku,Python,Django,Postgresql,Deployment,Heroku,因此,我将与django一起学习heroku的入门指南。但是,当我运行此命令时: 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?
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
但是。。我仍然会犯同样的错误。给出了什么?您需要将其添加到您的requirements.txt中:
psycopg2
默认情况下,Heroku配置Postgres数据库并将代码注入settings.py(https://devcenter.heroku.com/articles/django#postgres_database_config). 这将从环境变量数据库_URL读取,但需要安装psycopg2 我的应用程序结构已关闭。。。heroku希望结构如下所示:
toplevel
requirements.txt
myapp
manage.py
all other django stuff
我自己通过在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()
编辑: 正如@mipadi在这里指出的那样(http://stackoverflow.com/questions/13001031/django-heroku-settings-injection/13092534),其实可以这么简单:
import dj_database_url
DATABASES = {'default' : dj_database_url.config() }
如果您有一个数据库URL env变量集,则此选项有效。希罗库:pg_提升你的位置。详情如下
确保你的Heroku上有博士后
heroku addons:add heroku-postgresql:dev
步骤1:找出您的数据库url
heroku config | grep POSTGRESQL
输出将如下所示:
toplevel
requirements.txt
myapp
manage.py
all other django stuff
HEROKU_POSTGRESQL___URL:
postgres://user:password@主持人:5432/blabla
第二步:从上一步抓取设置名称(例如HEROKU_POSTGRESQL_ROSE_URL),然后像这样将其放入设置文件中
DATABASES = {'default': dj_database_url.config(default=os.environ["HEROKU_POSTGRESQL_ROSE_URL"])}
[更新]正如Ted所指出的,有一种方法可以将颜色URL升级为数据库_URL变量:
heroku pg:promote HEROKU_POSTGRESQL_ROSE_URL
然后,您的数据库设置可以使用数据库URL,而不是更奇特的彩色URL
DATABASES = {'default': dj_database_url.config(default=os.environ["DATABASE_URL"])}
鲍勃是你叔叔我也有同样的问题,我就是这样解决的 步骤1:按照Phillip的步骤1获取数据库名称(颜色) 步骤2:
$ heroku pg:promote HEROKU_POSTGRESQL_<COLOR>
$heroku pg:推广heroku\u POSTGRESQL\u
导致输出
Promoting HEROKU_POSTGRESQL_<COLOR> to DATABASE_URL... done
将HEROKU\u POSTGRESQL\u升级到数据库\u URL。。。完成
如果是一般性问题或Django特有的问题,您是否可以尝试使用一个简单的脚本进行手动连接。如果存在相同的问题,您是否最终修复了它?存在于我的requirements.txt文件中,请按照以下安装说明进行操作:我仍在运行Django 1.3.1。。。向上投票选择可能的1.4解决方案:)您尝试过吗?它可能也适用于1.3,可能与使用Dev DB的共享DB isntead有关,但无法验证这一点。我想这也可以解决你的问题。很好,特德。我将把这一点融入到我的原始回答中,对于那些仍在与Heroku+Django抗争的人,我已经整理了一个样板文件,以加快进度。非常固执己见,但它能完成任务: