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

लेकिन .. मुझे अभी भी वही त्रुटि मिलती है। क्या देता है?

psycopg2 

डिफ़ॉल्ट रूप से Heroku एक Postgres डेटाबेस कॉन्फ़िगर करता है और (अपने settings.py में कोड injects https://devcenter.heroku.com/articles/:

+0

यदि आप एक सामान्य समस्या है या Django के लिए विशिष्ट है तो मैन्युअल कनेक्शन कर एक साधारण स्क्रिप्ट के साथ प्रयास कर सकते हैं। – schlamar

+0

एक ही समस्या होने के साथ, क्या आप इसे अंत में ठीक कर चुके हैं? –

उत्तर

1

मेरा ऐप संरचना बंद किया गया था ... Heroku संरचना ऐसी लग चाहता है:

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

आप अपने requirements.txt को यह जोड़ने की जरूरत Django # postgres_database_config)। यह पर्यावरण परिवर्तनीय DATABASE_URL से पढ़ता है, लेकिन psycopg2 स्थापित करने की आवश्यकता है।

+0

यह मेरी आवश्यकताओं.txt फ़ाइल में मौजूद है, इन सेटअप निर्देशों का पालन कर रहा है: https://devcenter.heroku.com/articles/django – Msencenb

2

मैं अपने आप को settings.py के लिए निम्न कोड जोड़कर काम कर समझ में आ गया, किसी कारण Heroku नहीं था 'के लिए लगता है इसे मेरे लिए जोड़ें ....

आम तौर पर यह हमेशा हरोकू पर गतिशील रूप से कोड जोड़ता है लेकिन मुझे लगता है कि django 1.4 के बाद यह किसी कारण से ऐसा नहीं करता है। या मैं बस कुछ गलत कर रहा था।

वैसे भी यह कोड सिर्फ आपकी सेटिंग्स.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 चला रहा हूं अभी भी ... संभव 1.4 समाधान के लिए upvoting :) – 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: अपने डेटाबेस यूआरएल

heroku config | grep POSTGRESQL 

यह पता लगाने उत्पादन कुछ इस तरह दिखेगा:

HEROKU_POSTGRESQL__URL: पोस्टग्रेस: ​​// उपयोगकर्ता: पासवर्ड @ होस्ट: 5432/ब्लैब्ला

चरण 2: पिछले चरण से सेटिंग नाम प्राप्त करें (उदा।HEROKU_POSTGRESQL_ROSE_URL) और अपनी सेटिंग्स में रख तरह फाइल तो

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

[अद्यतन] के रूप में टेड ने कहा है, वहाँ एक रास्ता DATABASE_URL चर करने के लिए रंग URL का प्रचार करने के तरीके:

heroku pg:promote HEROKU_POSTGRESQL_ROSE_URL 

आपका डेटाबेस सेटिंग्स कर सकते हैं तो DATABASE_URL का उपयोग के रूप में करने के लिए और अधिक विदेशी रंग का यूआरएल

विरोध किया
DATABASES = {'default': dj_database_url.config(default=os.environ["DATABASE_URL"])} 

बॉब अपने चाचा है

+1

अभी भी हेरोोक + डीजेगो के साथ संघर्ष करने वालों के लिए, मैंने तेजी से जाने के लिए एक बॉयलरप्लेट को एक साथ रखा है। बहुत राय है लेकिन यह सामान पूरा हो जाता है: https://github.com/callmephilip/django-heroku-bootstrap –

1

मैं एक ही समस्या थी, यह कैसे मैं इसे हल है

Step1: डेटाबेस नाम (रंग)

चरण 2 प्राप्त करने के लिए फिलिप के चरण 1 का पालन करें:

$ heroku pg:promote HEROKU_POSTGRESQL_<COLOR> 

उत्पादन की ओर जाता है

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

बहुत अच्छा, टेड। मैं इस मूल को अपने मूल उत्तर में शामिल करूंगा –

संबंधित मुद्दे