[英]Deploying Django to Heroku (Psycopg2 Error)
所以我正在跟随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?
我认为这意味着数据库尚未设置...所以我手动添加了shared_db选项:
heroku addons:add shared-database:5mb
但是..我仍然得到同样的错误。 是什么赋予了?
编辑:
正如@mipadi在这里指出的那样(http://stackoverflow.com/questions/13001031/django-heroku-settings-injection/13092534),它实际上可以像这样简单:
import dj_database_url
DATABASES = {'default' : dj_database_url.config() }
如果您有一个DATABASE_URL env变量集,则此方法有效。 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"])}
鲍勃是你的叔叔
我通过将以下代码添加到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()
我的应用程序结构已关闭... heroku希望结构看起来像这样:
toplevel
requirements.txt
myapp
manage.py
all other django stuff
我有同样的问题,这就是我解决它的方式
Step1:按照Phillip的第1步获取数据库名称(颜色)
第2步:
$ heroku pg:promote HEROKU_POSTGRESQL_<COLOR>
导致输出
Promoting HEROKU_POSTGRESQL_<COLOR> to DATABASE_URL... done
您需要将此添加到您的requirements.txt:
psycopg2
默认情况下,Heroku配置Postgres数据库并将代码注入settings.py(https://devcenter.heroku.com/articles/django#postgres_database_config)。 这从环境变量DATABASE_URL读取,但确实需要安装psycopg2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.