2013-07-14 15 views
8

Recentemente ho installato un'app di Django su Heroku. La home page guarda bene, ma quando provo ad andare ad una pagina che consiste nel fare una query (ad esempio p = Photo.objects.get(title=title)), ottengo questo errore:OperationalError non è riuscito a connettersi al server

could not connect to server: Connection refused 
    Is the server running on host "localhost" and accepting 
    TCP/IP connections on port 5432? 

In accordo con this answer, ho fatto $ heroku pg:promote HEROKU_POSTGRESQL_GREEN_URL

Poi nel mio settings.py:

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

ancora avuto lo stesso errore, così ho provato a guardare i risultati di questa (come suggerisce this answer):

$ heroku run python manage.py shell 

>>> from django.conf import settings 

>>> print settings.DATABASES['default'] 

{'TIME_ZONE': 'UTC', 'TEST_MIRROR': None, 'NAME': 'snorthway', 'OPTIONS': {}, 
'HOST': 'localhost', 'TEST_NAME': None, 'PASSWORD': '******', 'ENGINE': 
'django.db.backends.postgresql_psycopg2', 'PORT': '', 'USER': 'snorthway', 
'TEST_COLLATION': None, 'TEST_CHARSET': None} 

A quel punto mi sono reso conto che non so cosa dovrei cercare in questo. Non riesco ancora a capire cosa significhi l'errore, quindi non sono sicuro di come procedere nel debugarlo.

+0

Sei in grado di interrogare il database dalla shell? Come importare i tuoi modelli e quindi eseguire p = Photo.objects.get (title = title)? –

+0

No, ho lo stesso errore quando importo i modelli ed eseguo qualcosa come 'print Photo.objects.all()'. – snorthway

+0

Quando esegui 'heroku config', vedi' DATABASE_URL' nell'elenco di vass config? Inoltre, non dovresti aver bisogno della parte 'default ='; Penso che dovrebbe essere semplicemente 'dj_database_url.config (os.environ ['DATABASE_URL'])' – jacobian

risposta

2

Non hai configurato correttamente il tuo database django in settings.py. Pensa che il tuo database sia su localhost. Suona come si dispone di un database Postgres Heroku così il vostro ospite dovrebbe essere qualcosa di simile:

df3-64-304-50-250.compute-1.amazonaws.com

Heroku espone un URL speciale database attraverso una variabile d'ambiente chiamata:

DATABASE_URL

Esiste un pacchetto python molto cool qui chiamato dj_database_url: https://github.com/kennethreitz/dj-database-url converte quella variabile di ambiente in ciò che si aspetta django.

è possibile installarlo con:

$pip install dj-database-url

Io uso il seguente nel mio settings.py

import dj_database_url 
DATABASES = { 
    'default': dj_database_url.config() 
} 
+0

Grazie. La tua risposta mi ha salvato la vita! –

Problemi correlati