Podejście do instalacji Postgresa w systemie Windows 7 do użytku jako baza danych PostgreSQL dla projektu rails 3 (3.0.7).
Preambuła (możesz pominąć ten fragment)
Pierwszą rzeczą, na którą należy zwrócić uwagę, jest to, że Postgres to nie tylko inne rozszerzenie pliku niż .sqlite3, to cały mechanizm zarządzania bazami danych. W związku z tym ma model klient/serwer, z których musisz skonfigurować oba, aby używać Postgres jako bazy danych dla Twojej aplikacji rails.
Motywacja do przejścia przez znaczny ból związany z konfiguracją Postgresa w porównaniu z prawie bezproblemową konfiguracją sqlite:jeśli wdrażasz do Heroku, obecnie używają Postgresa, więc niektóre z twoich wywołań SQL, które są poprawne w sqlite3, będą się zepsuć, gdy zostaną użyte z Postgresem. Dużo łatwiej jest debugować postgres lokalnie niż na serwerach Heroku.
Zrobiłem więc następujące rzeczy:(Zastrzeżenie:być może zapomniałem uwzględnić niektóre z rzeczy, które zrobiłem… zajęło mi ponad 48 godzin bólu, aby to zadziałało… jeśli poniższa rada nie Nie działa dla Ciebie ogromna (2300 stron!!), ale bardzo dokładna dokumentacja Postgresa powinna pomóc. Mimo wszystko polecam ją pobrać, jeśli poważnie myślisz o korzystaniu z Postgresa, ponieważ zawiera wiele materiałów, które dopiero zacząłem aby zrozumieć znaczenie.) (Drugie zastrzeżenie:prawie na pewno złamałem 20 rozsądnych wytycznych Postgres i ujawniłem luki w zabezpieczeniach w bazie danych Postgres, robiąc to. Jeśli są jakieś oczywiste rzeczy, z którymi doświadczony użytkownik Postgres się nie zgadza, edytuj mój post.)
.Krok 1. Pobierz i zainstaluj PostgreSQL v9.0.4-1, ponieważ tutaj powiedział, że tylko 9.0.x będzie obsługiwany w systemie Windows 7. Zachowałem wszystkie domyślne opcje i po prostu użyłem „tajnego” jako hasła po wyświetleniu monitu przez instalator Postgres o jedno (ponownie nie do końca pewien, jakie są konsekwencje udostępnienia tych informacji w Internecie… wkrótce się dowiem, jestem pewien). To hasło będzie potrzebne w kroku 3.
.Krok 2. Zmień zmienne środowiskowe w taki sposób, że Path (dla systemu , a nie użytkownik (nie jestem pewien, czy jest to istotne, czy nie)) to:C:\Program Files\PostgreSQL\9.0\bin
(Używam systemu Windows 64-bitowego, dlatego nie jest instalowany dla wersji 32-bitowej w 'C:\Program Files (x86)\PostgreS...')
Nie zapomnij zmienić praw dostępu do folderu PostgreSQL\9.0 i usunąć wszystkie domyślne prawa tylko do odczytu do folderu lub zawartości. (Może być również konieczne ponowne uruchomienie komputera, aby zaczęły one obowiązywać - dzięki @Gavin -chociaż mało prawdopodobne).
.Krok 3. Przetestuj instalację Postgresa, próbując utworzyć nową bazę danych:Z wiersza poleceń:createdb -U postgres mydb_as_postgres
.Powinieneś zostać teraz poproszony o podanie hasła, jeśli nie, być może musisz najpierw uruchomić serwer (nie pamiętam, czy musiałem to zrobić, czy nie). Najprostszym sposobem jest skorzystanie z pgAdmin III, który powinien być 'pgAdmin3.exe' w folderze takim jak C:\Program Files\PostgreSQL\9.0\bin
. Po uruchomieniu pgAdmin III po lewej stronie powinien pojawić się panel o nazwie „Przeglądarka obiektów”. W tym powinno być drzewo z:
Grupy serwerów> Serwery> PostgreSQL 9.0 (localhost:5432)
Kliknij prawym przyciskiem myszy „PostgreSQL 9.0 (localhost:5432)” i wybierz „Połącz”.
createdb -U postgres mydb_as_postgres
polecenie powinno utworzyć nową bazę danych o nazwie „mydb_as_postgres”, którą możesz sprawdzić, uruchamiając pgAdmin III i klikając dwukrotnie „PostgreSQL 9.0 (localhost:5432)”. Pod tym powinno być:
Databases (2)
który powinien zawierać listę 2 baz danych o nazwie mydb_as_postgres
i postgres
Nazwałem to _as_postgres
ponieważ -U postgres
część polecenia mówi Postgresowi, aby utworzył bazę danych z użytkownikiem postgres jako jej właścicielem, co należy określić, gdy nie jesteś zalogowany jako użytkownik postgres. Mam wszystkie moje pliki przechowywane jako użytkownik „AJames”, więc jeśli jesteś taki sam i chcesz dalej rozwijać swoją aplikację po zalogowaniu się jako inny użytkownik, musisz teraz utworzyć „rolę” Postgres dla tego użytkownika (patrz krok 4)).
.Krok 4. Poprzez pgAdmin III. Kliknij prawym przyciskiem myszy role logowania (dla mnie jest to):
Przeglądarka obiektów> Grupy serwerów> Serwery> PostgreSQL 9.0 (localhost:5432)> Role logowania
Kliknij prawym przyciskiem myszy role logowania i wybierz „Nowa rola logowania...” w nazwie roli, wpisz nazwę użytkownika systemu operacyjnego, która dla mnie to AJames, i wpisz hasło w zakładce „Uprawnienia ról”, zaznaczyłem wszystkie pola, ale doświadczony użytkownik Postgresa prawdopodobnie zdecydowanie zaleciłby sprawdzenie tylko „dziedziczy prawa z ról nadrzędnych” i „może tworzyć obiekty bazy danych”. Nie jestem jednak doświadczonym użytkownikiem i chcę tylko debugować wywołania Rails SQL w Postgresie, więc Na wszelki wypadek zaznaczyłem też „Superużytkownika” i „Może tworzyć role”.
.Krok 5. Teraz powinieneś być w stanie utworzyć nową bazę danych bez logowania się jako użytkownik postgres. Spróbuj wpisać:
createdb mydb_as_user
Mam nadzieję, że to powinno działać dla Ciebie.
.Krok 6. Ok, więc masz plik development.sqlite3 w katalogu 'db/' swoich rails. Początkowo zamierzałem ustawić następny test jako konwersję tego z sqlite3 na psql.
Nie mogłem jednak tego uruchomić, ale zostawiłem tutaj moje próby, ponieważ rozwiązanie, którego użyłem, wymagało posiadania danych w aplikacji Rails Heroku.com (zamiast tego zobacz rozwiązanie od kroku 7 i dalej). Ci, którzy mają tylko lokalną aplikację i nie mają danych w Heroku, nie mogą użyć tego samego podejścia, więc mogą potrzebować zbadać coś takiego:
x6.1 Najpierw przetestuj 'psql', próbując polecenia z wiersza poleceń, takiego jak:
psql mydb_as_user
powinno to wyświetlić coś takiego jak poniżej (po wpisaniu hasła):
C:>psql mydb_as_user
Password:
psql (9.0.4)
WARNING: Console code page (850) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
Type "help" for help.
mydb5=#
x6.2 spróbuj wpisać:
CREATE TABLE users_table (id integer, "name" text);
Powinien wyświetlać:
CREATE TABLE
mydb5=#
Jeśli sprawdzisz pgAdmin III, powinieneś zobaczyć tabelę pod:
Przeglądarka obiektów> Grupy serwerów> Serwery> PostgreSQL 9.0 (localhost:5432)> Bazy danych> mydb_as_user> Schematy> public> Tabele> tabela_użytkowników>
x6,3 OK, obok spróbuj konwersji. Pobrano prekompilowany plik binarny sqlite-shell dla systemu Windows.
x6.4 Utwórz nowy katalog, użyłem „C:\temp” i umieściłem w nim plik sqlite3.exe i twoje pliki development.sqlite3.
x6. 5 Użyj następujących poleceń (które pochodzą stąd), aby zrzucić bazę danych development.sqlite3 do Postgresa.
sqlite3 development .dump | psql development2
możesz otrzymać błąd taki jak:
psql: FATAL: database "development2" does not exist
x6.6, więc wszedłem do pgAdmin III i stworzyłem bazę danych deweloperskich 2, spróbowałem ponownie polecenie i otrzymałem:
ERROR: syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
^
BEGIN
COMMIT
Jak powiedziałem, nie mogłem zmusić tego do pracy. Jestem pewien, że istnieje sposób na obejście tego błędu, ale pomyślałem o innym sposobie, więc zamiast tego użyłem tego rozwiązania (które wymaga konta Heroku, aby mieć twoje dane i wykonuje konwersję z sqlite3 na psql za pomocą klejnotu Taps (ja wierzyć):
.Krok 7. w pgAdmin III stworzyłem kolejną bazę danych. W zakładce właściwości ustawiam nazwę:'development', właściciel:'AJames' (zastąp to własną nazwą użytkownika Windows). W zakładce uprawnień ustaw rolę:'public' i zaznacz opcję WSZYSTKIE (pomyślałem, że ta opcja jest niezaznaczona, więc nie jestem pewien, czy jest to konieczne).
.Krok 8. addgem 'pg', '0.11.0'
do twojego pliku klejnotów. Prawdopodobnie będziesz także chciał usunąć:gem 'sqlite3'
w tym momencie też.
.Krok 9. ustaw database.yml zgodnie z sugestią:
development:
adapter: postgresql
database: db/development
username: AJames # replace this with your own user name
password: secret # replace this with your own password
host: localhost
encoding: UTF8
pool: 5
timeout: 5000
Jeśli pracujesz nad projektem open source i nie chcesz, aby Twoje hasło było publicznie dostępne, zapoznaj się z niektórymi odpowiedziami na temat Bezpieczne udostępnianie hasła bazy danych w aplikacji Rails.
.Krok 10. z wiersza poleceń w katalogu głównym aplikacji rails run:rake db:migrate
Spowoduje to utworzenie nowego schematu i wszystkich tabel w bazie danych Postgres.
.Krok 11. uruchom heroku db:pull
z wiersza poleceń (ponownie z katalogu głównego aplikacji rails), aby ściągnąć wszystkie dane w dół i do nowej pustej bazy danych Postgres. Myślę, że w tym momencie twój klejnot kranów wykona tę pracę za ciebie.
.Krok 12. Mam nadzieję, że nie ma kroku 12! ...i powinno teraz działać dla Ciebie. Szczęśliwego debugowania RoR PostgreSQL! Zmień lub daj mi znać, jeśli są w tym jakieś błędy.
Oto lista dodatkowych rzeczy, które mogą być interesujące/przydatne:
- To jest post na blogu o hasłach Postgres, do czego służą, do czego ich potrzebujesz, jak je zmienić itp.
- To, w sekcji „Tworzenie bazy danych przestrzennej”, jest przydatne dla początkujących, aby zrozumieć, o czym jest pg_hba.conf, a drugi link, który Reno podał powyżej, w sekcji „Korzystanie z GUI pgAdmin III” jest przydatny do testowania, czy postgres rzeczywiście działa , zanim spróbujesz dopasować go do Railsów (tj. spróbuj utworzyć bazę danych i wstawić do niej tabelę oraz niektóre dane).
- W ogromnej, ale bardzo obszernej dokumentacji Postgresa zacząłbym na stronie 58, „I. instruktaż'. Następnie na stronie pdf 431(!) znajduje się „Rozdział 17. Konfiguracja i obsługa serwera”, który również okazał się przydatny.