2012-05-15 130 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

非常好,特德。我將在我的原始答案中加入這一點 –