2012-05-15 125 views
8

所以我使用django从heroku开始学习入门指南。然而,当我运行此命令:将Django部署到Heroku(Psycopg2错误)

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 

但是..我仍然得到同样的错误。是什么赋予了?

+0

你可以尝试一个简单的脚本做手动连接,如果它是一般性问题或特定于Django。 – schlamar

+0

有同样的问题,你最终修复它? –

回答

1

我的应用程序结构是关闭... Heroku的希望结构是这样的:

toplevel 
    requirements.txt 
    myapp 
    manage.py 
    all other django stuff 
0

您需要添加到您的requirements.txt:

psycopg2 

默认配置的Heroku Postgres的数据库,并注入代码到你的settings.py(https://devcenter.heroku.com/articles/ Django的#postgres_database_config)。这从环境变量DATABASE_URL中读取,但确实需要安装psycopg2。

+0

存在于我的requirements.txt文件中,按照以下设置说明进行操作:https://devcenter.heroku.com/articles/django – Msencenb

2

我把它加入以下代码的settings.py自己的工作,似乎是出于某种原因的Heroku没” t add it for me ....

通常它总是在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() 
+0

我正在运行django 1.3.1仍然... upvoting可能的1.4解决方案:) – Msencenb

+0

你试一下?它也可能适用于1.3,它可能与使用共享数据库而不是开发数据库有关,但无法验证。我认为这可能会解决您的问题。 –

8

编辑:

由于@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步:找出你的数据库URL

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"])} 

[更新]作为泰德指出,有一种方法,以促进颜色网址DATABASE_URL变量:

heroku pg:promote HEROKU_POSTGRESQL_ROSE_URL 

你的数据库设置可在然后用DATABASE_URL,而不是更多的外来有色URLS

DATABASES = {'default': dj_database_url.config(default=os.environ["DATABASE_URL"])} 

鲍勃是你的叔叔

+1

对于那些仍在与Heroku + Django苦苦挣扎的人来说,我已经组建了一个样板来快速发展。非常有见地,但它得到的东西完成:https://github.com/callmephilip/django-heroku-bootstrap –

1

我有同样的问题,这是我如何解决它

第一步:按照菲利普的第1步获取数据库名称(颜色)

第二步:

$ heroku pg:promote HEROKU_POSTGRESQL_<COLOR> 

导致输出

Promoting HEROKU_POSTGRESQL_<COLOR> to DATABASE_URL... done 
+0

非常好,特德。我将在我的原始答案中加入这一点 –