2011-12-26 16 views
56

Używam Heroku do mojej aplikacji i wymaga PostgreSQL, ale nadal możesz używać SQLite3 do programowania. Ponieważ Heroku zdecydowanie odradzał posiadanie dwóch różnych baz danych, zdecydowałem się przejść na PostgreSQL do programowania. Zainstalowałem gem pg, a także udałem się na oficjalną stronę PostgreSQL, aby pobrać instalator Windows, a także zmieniono moją database.yml. Podczas instalacji wymaga hasła do PostgreSQL, więc zrobiłem je. Musiałem zmienić plik pg_hba.conf za pomocą md5 na trust, aby uzyskać przeszłość: fe_sendauth: no password supplied podczas próby utworzenia bazy danych.Rola nie istnieje i nie można utworzyć bazy danych podczas korzystania z PostgreSQL

# TYPE DATABASE  USER   ADDRESS     METHOD 

# IPv4 local connections: 
host all    all    127.0.0.1/32   trust # was md5 
# IPv6 local connections: 
host all    all    ::1/128     trust # was md5 
# Allow replication connections from localhost, by a user with the 
# replication privilege. 
#host replication  postgres  127.0.0.1/32   trust 
#host replication  postgres  ::1/128     trust 

Po pozbyciu się, że choć teraz uzyskać to:

$ rake db:create 
(in C:/app) 
FATAL: role "User" does not exist 
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"utf8", 
"database"=>"app_test", "pool"=>5, "username"=>nil, "password"=>nil} 

ja nadal nie mam development.sqlite3 i text.sqlite3 prezent, to może być problem? Co musi być zrobione?

Oto mój pełny sens: https://gist.github.com/1522188

Odpowiedz

118

Dodaj użytkownika do database.yml, równie dobrze może używać nazwy Twojej aplikacji (lub jakiś wariant nazwa) jako nazwę użytkownika, użyję app_name jako zastępczy:

development: 
    adapter: postgresql 
    encoding: utf8 
    database: app_development 
    pool: 5 
    username: app_name 
    password: 

Następnie utworzyć użytkownika (aka "rola") wewnątrz PostgreSQL za pomocą psql.exe:

$ psql -d postgres 
postgres=# create role app_name login createdb; 
postgres=# \q 

Pierwsza linia znajduje się w twoim terminalu, następne dwa znajdują się wewnątrz psql. Następnie wykonaj swoją rake db:create.

User użytkownik może domyślnie ale user is already taken do innych celów w PostgreSQL tak trzeba by zacytować go zachować sprawę, jeśli chciał użyć User jako użytkownik:

postgres=# create role "User" login createdb; 

Jesteś lepiej zrezygnować z tworzenia jednego użytkownika na aplikację.

Będziesz także chciał zrobić podobne rzeczy dla swojego wpisu test w database.yml.

+1

To nie pozwala mi wejść do 'psql.exe'. Kiedy próbuję go otworzyć, okno pojawia się, a następnie automatycznie zamyka, więc próbowałem przejść do wiersza poleceń cmd i wpisałem c: \ Program Files .. \ .. \ bin> psql.exe> ​​psql: FATAL: rola "Użytkownik" nie istnieje "po ponownym uruchomieniu" FATAL ". Jakieś pomysły? – LearningRoR

+1

@wrbg: Stworzyłeś użytkownika 'postgres' podczas instalacji, prawda? Wypróbuj 'psql -d postgres -U postgres', jeśli potrzebujesz hasła, a następnie' psql -d postgres -U postgres -W'. –

+0

Nie pytał o użytkownika podczas instalacji. Pozwól mi zobaczyć w ponownej instalacji. – LearningRoR

6

PostgreSQL spróbuje utworzyć bazę danych z nazwą konta (loginem), jeśli numer username nie został określony w twoim config/database.yml. Na OS X i Linux możesz zobaczyć, kto to jest z whoami. Wygląda na to, że używasz systemu Windows.

Rozwiązanie A: Create a PostgreSQL user pasujące do tego, którego szuka. Na przykład

createuser --superuser some_user 

Roztwór B: Zmień użytkownik DB jawnie ustawienie użytkownika as shown in mu's answer.

+0

Youdaman! To był jedyny, który pracował dla mnie. –

+0

Czy naprawdę potrzebujesz '--superuser' lub' -d' wystarczy? – Meekohi

4

Jeśli masz konkretne konto/użytkownika na swoim komputerze, na przykład postgres zwany postgres.

Następnie wykonanie tego polecenia spowoduje wyświetlenie zachęty do wprowadzenia nazwy roli.

sudo -u postgres createuser --interactive 

Potem robi

rake db:create 

Powinna działać!

Powiązane problemy