2013-06-11 14 views
10

Wiem, że istnieje wiele pytań dotyczących podobnych zagadnień, ale myślę, że mam specyficzny smak, który nie został jeszcze rozwiązany. Próbuję utworzyć moją lokalną bazę danych PostgreSQL tak, że mogę robić lokalny rozwój oprócz pchania do Heroku.Konfigurowanie bazy danych PostgreSQL do lokalnego rozwoju w Django podczas korzystania z Heroku

znalazłem odpowiedzi na podstawowe, jak to zrobić, na przykład (co moim zdaniem jest odrobinę przestarzałe):

'#DATABASES = {'default': dj_database_url.config(default='postgres://fooname:[email protected]/dbname')}' 

Rozwiązuje to „silnik” nie jest skonfigurowany błąd. Jednak gdy uruchomię „Pythona manage.py syncdb” pojawia się następujący błąd:

'OperationalError: FATAL: password authentication failed for user "foo" 
FATAL: password authentication failed for user "foo"' 

Dzieje się tak dla wszystkich możliwych kombinacji nazwy użytkownika/hasło. Tak więc moja nazwa/hasło użytkownika ubuntu, moja nazwa użytkownika/hasło heroku itp. To samo dzieje się, gdy próbuję wyjąć komponent Heroku i zbudować go lokalnie, tak jakbym korzystał z postgresql podczas wykonywania samouczka. Ponieważ nie mam jeszcze bazy danych, do czego odnoszą się te wartości username/pass? Czy problem polega właśnie na tym, że najpierw muszę utworzyć bazę danych? Jeśli tak to jak?

marginesie Wiem, że mógłbym dostać db z Heroku wykorzystując procedurę opisaną tutaj: Should I have my Postgres directory right next to my project folder? If so, how?

Ale zakładając, że były to zrobić, gdzie będzie nowa db żywo, w jaki sposób Django wiedzieć, jak uzyskać dostęp do to i czy będę miał te same problemy z użytkownikami/przejściami?

Dzięki za bukiet.

+0

Czy możesz opublikować całe 'settings.py'? –

+0

Jak pamiętam, dla systemów Nix musisz mieć dla początkowego co najmniej użytkownika o nazwie 'postgres' dla acess do postgres DB. Moje doświadczenie z PG jest ograniczone przez Win, Ubunru i CentOS. Spróbuj wykonać status pg_ctl. Następnie sprawdź, czy Twój system operacyjny jest akceptowany przez protokół TCP do PostgreSQL; następnie, sprawdź plik postgres pg_hba.conf pod kątem akceptowalnych adresów. I tak dalej. Najprostszym sposobem jest zwrócenie się do Google: "PostgreSQL" [YourOSName] I tak, python nie ma żadnych powiązań z PG jak dla innych DBMS. – Abelisto

Odpowiedz

18

Zakładając, że masz zainstalowany postgres, połącz się za pomocą pgadmin lub psql i utwórz nowego użytkownika. Następnie utwórz nową bazę danych i z nowym użytkownikiem jako właścicielem. Upewnij się, że możesz połączyć się poprzez bazę danych psql z nowym użytkownikiem z bazą danych. następnie musisz ustawić zmienną env w pliku postactivate w folderze bin virtualenv i zapisać go. Oto, co mam do bazy danych:

export DATABASE_URL='postgres://{{username}}:{{password}}@localhost:5432/{{database}}' 

Tylko uwaga: dodanie tej wartości do postactivate nic nie robi. Plik nie jest uruchamiany po zapisaniu. Będziesz musiał uruchomić to po znaku zachęty $ lub po prostu dezaktywować i aktywować swój virtualenv.

Twój settings.py powinien przeczytać od tego env var:

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

Będziesz następnie skonfigurować Heroku z ich narzędzie CLI aby wykorzystać swoją bazę produkcyjną po wdrożeniu. Coś jak:

heroku config:set DATABASE_URL={{production value here}} 

(jeśli nie zainstalowano narzędzie CLI Heroku jest, trzeba to zrobić)

Jeśli chcesz dowiedzieć jak dokładnie to, że wartość potrzebne do bazy produkcyjnej, ty można go uzyskać logując się do poddomeny postgresql heroka (w czasie, gdy jest to zapisywane, to jest https://postgres.heroku.com/) i wybierając bazę danych z listy i patrząc na wartość "Ustawienia połączenia: URL".

W ten sposób ta sama wartość parametru settings.py będzie działać zarówno w wersji lokalnej, jak i produkcyjnej, a nazwy użytkownika i hasła pozostaną poza kontrolą wersji. Są to tylko wartości env config.

+0

Dzięki za pomoc David. Byłem w stanie zrobić pierwszy krok następujący: http://www.cyberciti.biz/faq/howto-add-postgresql-user-account/. Czy mógłbyś podać przykład ustawienia zmiennej env, jaka powinna być i jak zrobić, aby program settings.py ją odczytał? Jestem trochę zdezorientowany na tym końcu. –

+0

@JohnLucas Zmieniłem moją odpowiedź, aby spróbować odpowiedzieć na twoje pytania. Daj mi znać, jeśli potrzebujesz więcej pomocy. –

+0

Dziękuję za pomoc –

Powiązane problemy