2013-07-14 18 views
8

Niedawno umieściłem aplikację Django na Heroku. Strona główna wygląda w porządku, ale gdy próbuję przejść do strony, która polega na wykonaniu kwerendy (np p = Photo.objects.get(title=title)), otrzymuję ten błąd:OperationalError nie mógł połączyć się z serwerem

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

zgodnie z this answer, zrobiłem $ heroku pg:promote HEROKU_POSTGRESQL_GREEN_URL

Następnie w moim settings.py:

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

Nadal mam ten sam błąd, więc próbowałem patrząc na wyniki to (jak sugeruje 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} 

W tym momencie uświadomiłem sobie, że nie wiem, czego powinienem w tym momencie szukać. Nadal nie rozumiem, co oznacza błąd, więc nie jestem pewien, jak to zrobić z debugowaniem.

+0

Czy jesteś w stanie do kwerendy bazy danych z powłoki? Jak importowanie modeli, a następnie uruchamianie p = Photo.objects.get (title = title)? –

+0

Nie, pojawia się ten sam błąd, gdy importuję modele i uruchamiam coś w stylu 'print Photo.objects.all()'. – snorthway

+0

Po uruchomieniu 'heroku config', widzisz' DATABASE_URL' na liście zmiennych konfiguracyjnych? Ponadto nie powinieneś potrzebować części 'default ='; Myślę, że powinno to być po prostu 'dj_database_url.config (os.environ ['DATABASE_URL'])' – jacobian

Odpowiedz

2

Nie skonfigurowałeś poprawnie bazy danych Django w pliku settings.py. Uważa, że ​​twoja baza danych znajduje się na localhost. Brzmi jak masz Heroku bazy postgres'owy więc gospodarz powinno być coś takiego:

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

Heroku naraża specjalny adres URL bazy danych przez zmienną środowiskową o nazwie:

DATABASE_URL

Jest bardzo fajny pakiet python tutaj o nazwie dj_database_url: https://github.com/kennethreitz/dj-database-url konwertuje tę zmienną środowiskową na oczekiwaną przez django.

można zainstalować go z:

$pip install dj-database-url

używam następujących w moim settings.py

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

Dziękuję. Twoja odpowiedź uratowała mi życie! –

Powiązane problemy