2011-08-17 16 views
16

Obecnie pojawia się następujący błąd:Instalacja PostgreSQL na windows do użytku z Ruby-on-Rails

PGError (FATAL: password authentication failed for user "postgres"):

kiedy moja aplikacja próbuje uzyskać dostęp do bazy danych.

Chciałem przetestować moje wywołania SQL przeciwko postgresom, jako że moja aplikacja ulega regularnym przerwom, gdy zostały przeniesione do produkcji na Heroku ze względu na ostrzejsze wymagania postgres (które, jak myślę, jest chyba rzeczą zdrową) ponad sqlite 3. Mam więc podobne żądanie to this dla nieaktualnego samouczka do instalacji Postgrena do użytku z rubinem na szynach w oknach (7) proszę. Myślałem, że to będzie szybkie 20 minut pobierania i instalacji, ale 2 i kilka godzin później i nie sądzę, żebym jeszcze był blisko. Do tej pory mam:

pobrać i zainstalować PostgreSQL w wersji 8.4.8-1 from here

Ustaw moje zmienne środowiskowe takie, że ścieżka (dla użytkowników) jest: C:\Ruby192\bin;C:\Program Files (x86)\PostgreSQL\8.4\bin

Gemfile:

gem 'pg', '0.11.0' # instead of gem 'sqlite3', '1.3.3' 

uruchomił bundle install dla mojej aplikacji rails pozornie z powodzeniem, ale nie znalazłem jeszcze łatwego sposobu sprawdzenia poprawności instalacji.

zestaw database.yml as suggested here do:

development: 
    adapter: postgresql 
    database: db/development 
    username: postgres 
    password: secret 
    host: localhost 
    encoding: UTF8 
    pool: 5 
    timeout: 5000 

wiem muszę set up a user name and password for Postgres, maybe also start the postgres server, connect to it(?) i umieścić w moim lokalnym adresem IP będę z nim połączyć na into a config files somewhere a następnie edytować jeden z pozostałych .conf pliki w 'C: \ Program Files (x86) \ PostgreSQL \ 8.4 \ data' etc ...

Myślę, że Rails mnie zmiękczył, czyż nie nad myśleniem, czy jest to dość trudne do skonfigurowania, a ja powinieneś wrócić do Sqlite3, dla którego jest też niesamowicie przydatny SQLite Manager, wtyczka Firefox?

jestem wciąż szukają przewodnika początkujących do instalowania i używania PostgreSQL dla szyn, ale do tej pory były tylko mylone przez większość rzeczy patrzę w/spróbował po jak this, this, this, this, this (dla Snow Leopard), this (Linux).

Wszelkie wskazówki będą mile widziane. Dzięki!

James

+0

po prostu zainstalować PostgreSQL od https : //postgrespro.com/windows, wszystkie inne ustawienia - popularny sposób. – prograils

Odpowiedz

67

Podejście do instalacji PostgreSQL w systemie Windows 7 do wykorzystania jako baza danych PostgreSQL dla projektu rails 3 (3.0.7).


Preambuła (można pominąć ten bit)

Więc pierwszą rzeczą, którą należy podkreślić, jest to, że PostgreSQL jest nie tylko inny rozszerzenie pliku z .sqlite3, to cały mechanizm do zarządzania bazami danych . Jako taki ma model klient/serwer, z którego będziesz musiał skonfigurować zarówno używanie PostgreSQL jako bazy danych dla twojej aplikacji railsowej.

Motywacja do przechodzenia znacznego bólu z Postgreatora w porównaniu do prawie bez wysiłku instalacji sqlite: jeśli wdrażasz system Heroku, obecnie używają PostgreSQL, więc niektóre z twoich wywołań SQL, które są w porządku na sqlite3, zostaną zerwane, gdy użyjesz ich z Postgresem . Dużo łatwiej jest debugować PostgreSQL lokalnie niż wtedy, gdy jest on na serwerach Heroku.

Zrobiłem następujące rzeczy: (Zastrzeżenie: być może zapomniałem włączyć niektóre rzeczy, które zrobiłem ... zajęło mi ponad 48 godzin bólu, aby go uruchomić ... Poniższa porada nie działa dla ciebie, wtedy ogromna (2300 stron !!), ale very thorough Postgres documentation powinna pomóc.Ile zalecam pobieranie tego tak czy inaczej, jeśli poważnie myślisz o używaniu Postgres, ponieważ ma dużo materiału, który mam tylko zacząłem rozumieć znaczenie.) (Drugie zastrzeżenie: prawie na pewno złamałem 20 sensownych wytycznych PostgreSQL i ujawniłem luki w zabezpieczeniach w bazie danych PostgreSy.) Jeśli wystąpią oczywiste rzeczy, których doświadczony użytkownik Postgres nie zgadza się, edytuj moje po.)


.step 1. Pobierz i zainstaluj PostgreSQL v9.0.4-1 z here ponieważ here powiedział tylko 9.0.x będą obsługiwane w systemie Windows 7. Ciągle wszystkie opcje domyślne i tylko używane „tajemnicę” jako hasło gdy zostaniesz poproszony przez instalator PostgreSQL o jeden (ponownie nie jestem do końca pewien, jakie będą konsekwencje udostępnienia tych informacji w Internecie ... wkrótce się dowiem). Musisz to hasło w kroku 3.

.step 2. zmienne Zmiana otoczenia tak, że ścieżka (for system, not user (nie jestem pewien, czy to ma znaczenie, czy nie)) wynosi: C:\Program Files\PostgreSQL\9.0\bin
(NB I "W 64-bitowych oknach, więc nie jest instalowany dla 32-bitowych w" C: \ Program Files (x86) \ PostgreS ... ")

Nie zapomnij zmienić prawa dostępu do folderu PostgreSQL \ 9.0 i usuń wszelkie domyślne uprawnienia do odczytu w folderze lub treści. (Może być również konieczne ponowne uruchomienie komputera, aby te ustawienia zaczęły działać - dzięki @Gavin - chyba nie jest prawdopodobne).

.step 3. instalacja testowe Postgres próbując utworzyć nową bazę danych: z linii poleceń: createdb -U postgres mydb_as_postgres. Powinieneś zostać poproszony o wprowadzenie hasła teraz, jeśli nie, może to oznaczać, że musisz najpierw uruchomić serwer (nie pamiętam, czy musiałem to zrobić, czy nie). Najprostszym sposobem jest pgAdmin III, który powinien być "pgAdmin3.exe" w folderze gdzieś takim jak C:\Program Files\PostgreSQL\9.0\bin. Po uruchomieniu pgAdmin III po lewej powinien być 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 na 'PostgreSQL 9.0 (localhost: 5432)' i wybierz 'Connect'.

Komenda createdb -U postgres mydb_as_postgres powinna utworzyć nową bazę danych o nazwie "mydb_as_postgres", którą można sprawdzić, uruchamiając pgAdmin III i klikając dwukrotnie "PostgreSQL 9.0 (localhost: 5432)". Zgodnie z tym nie powinno być:

Databases (2) które powinny notować 2 bazy danych o nazwie mydb_as_postgres i postgres

nazwałem go _as_postgres ponieważ -U postgres część komendy mówi PostgreSQL, aby utworzyć bazę danych użytkownika postgres jak to właściciel, który musisz określić, kiedy nie jesteś zalogowany jako użytkownik postgresu. Wszystkie moje pliki są 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 utworzyć rolę "PostgreS" dla tego użytkownika (zobacz krok 4).

. Krok 4. Poprzez pgAdmin III. Kliknij prawym przyciskiem myszy na Login Roles (co dla mnie jest w):

Object Browser> Serwer Grupy> Serwery> PostgreSQL 9.0 (localhost: 5432)> Zaloguj Role

Kliknij prawym przyciskiem Login Roles i wybierz „Nowa Role logowania ... " w nazwie roli, wpisz swoją nazwę użytkownika systemu operacyjnego, która jest dla mnie AJames, i wpisz swoje hasło w zakładce" Uprawnienia do roli ", zaznaczyłem wszystkie pola, ale doświadczony użytkownik postgresu prawdopodobnie zalecałby tylko sprawdzenie "uprawnień dziedziczenia z ról nadrzędnych" i "może tworzyć obiekty bazy danych" Ale nie jestem doświadczonym użytkownikiem i po prostu chcę debugować wywołania Rails SQL w Postgresie, więc sprawdziłem także "Superuser" i "Może tworzyć role", na wszelki wypadek.

. Krok 5. Powinieneś teraz móc tworzyć nową bazę danych bez zalogowania się jako użytkownik postgreSQL. Spróbuj wpisać:

createdb mydb_as_user

Mam nadzieję, że to powinien pracować dla Ciebie.

.Krok 6. Okej, więc masz plik development.sqlite3 w katalogu "db /" w twoim szynie. Początkowo zamierzałem ustawić następny test jako konwersję z sqlite3 na psql.
Nie mogłem tego użyć, ale zostawiłem tutaj swoje próby, ponieważ rozwiązanie, którego używałem, wymagało danych w aplikacji Rails na Heroku.com (zamiast tego patrz rozwiązanie od kroku 7). Dla tych, którzy mają tylko lokalną aplikację i brak danych w Heroku, nie mogą używać tego samego podejścia, więc mogą potrzebować czegoś takiego:

x6.1 Najpierw przetestuj "psql", wykonując polecenie z linii poleceń jak:

psql mydb_as_user

powinno wyświetlić coś jak poniżej (po wpisaniu w 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);

Powinno wyświetlić:

CREATE TABLE 
mydb5=# 

Jeśli zaznaczysz w pgAdmin III, powinieneś zobaczyć tabelę tam pod:

Object Browser> Serwer Grupy> Serwery > PostgreSQL 9.0 (localhost: 5432)> Bazy danych> mydb_as_user> Schematy> public> Tables> users_table>

x6,3 OK, obok t nawrócenie. Downloaded sqlite-shell prekompilowany plik binarny dla systemu Windows.
x6.4 Utwórz nowy katalog, użyłem "C: \ temp" i umieściłem w nim pliki sqlite3.exe i development.sqlite3.
x6.5 Użyj następujących poleceń (które pochodzą z here), aby zrzucić bazę danych development.sqlite3 do PostgreSQL.

sqlite3 development .dump | psql development2

może pojawi się błąd jak:

psql: FATAL: database "development2" does not exist

x6.6 więc poszedłem do pgAdmin III i wykonane bazę rozwój 2, próbował ponownie komendę i otrzymała:

ERROR: syntax error at or near "PRAGMA" 
LINE 1: PRAGMA foreign_keys=OFF; 
     ^
BEGIN 
COMMIT 

Tak jak powiedziałem, nie mogłem go uruchomić. Jestem pewien, że istnieje sposób na obejście tego błędu, ale pomyślałem o innym sposobie, więc użyłem tego rozwiązania (które wymaga konta Heroku, aby mieć twoje dane i wykonuje konwersję z sqlite3 do psql używając gem Taps (I wierzę):

.step 7. w pgAdmin III stworzyłem innej bazy danych na karcie właściwości ustawić nazwę:. „rozwój”, owner:. „” (AJames zastąpić to z własnej nazwy użytkownika systemu Windows) oraz w zakładce przywilejów, ustawić rolę: „publiczne” i zaznaczona opcja wszystko (że to resetuje do zlekceważenia, więc nie jestem pewien, że to konieczne)

.step 8. dodać . 10 do pliku gem. Prawdopodobnie będziesz także chciał usunąć: .

.step 9. zestaw database.yml jak suggested here do:

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 udostępnione publicznie, mają wygląd w niektórych odpowiedziach na Securely providing the database password in a Rails app.

.step 10. z linii poleceń w perspektywie katalogu głównym Twojej aplikacji Rails za: rake db:migrate Spowoduje to utworzenie nowego schematu i wszystkie tabele w bazie danych PostgreSQL.

.Krok 11. uruchom heroku db:pull z wiersza poleceń (ponownie w katalogu głównym aplikacji rails), aby pobrać wszystkie dane w dół do nowej pustej bazy danych Postgres. Myślę, że w tym momencie twój klejnot klejnotów wykona tę pracę za Ciebie.


.step 12. Mam nadzieję, że nie ma kroku 12! ... i teraz powinno działać dla ciebie. Szczęśliwe debugowanie PostgreSQL RoR! Proszę edytować, lub daj mi znać, jeśli są jakieś błędy w tym.

Również tutaj znajduje się lista dodatkowych rzeczy, które mogą być interesujące/przydatne:

+1

Po prostu chciałem dodać, że po zmianie zmiennych środowiskowych w kroku 2 konieczne będzie ponowne uruchomienie komputera. Wylogowanie i powrót prawdopodobnie też będą działać, ale i tak potrzebowałem restartu, więc to właśnie zrobiłem. – Gavin

+2

Awesome post. bardzo mi pomogło :) – Ajay

+0

Używam PostgreSQL 9.5 na Windows 7 64x i Rails 4.2.4 i to działa dobrze – Matthias

2

Żaden z linków okazał się (prawdopodobnie) najbardziej przydatna dokumentacja - to official PostgreSQL docs. Niedawno skonfigurowałem system Linux Mint z postgresql i django używając kombinacji tych dokumentów i these, chociaż te ostatnie są specyficzne dla Linuksa.

Byłbym bardziej martwić się o walidację strony postgresql, a mniej o szyny. To znaczy, twoje pytanie powinno brzmieć "Jak mogę skonfigurować i przetestować serwer PostgreSQL na Windows 7 box", moreso, niż musisz wiedzieć, jak je zablokować w szynach.

Edycja: Może być również przydatna dla ciebie this - oficjalne wiki postgresql ze szczegółowymi instrukcjami instalacji.

Powodzenia!

+0

Dzięki Reno. Te linki wyglądają na o wiele lepszy kierunek. Odpowiem, jak sobie poradzę. (Doskonały, http://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows#What_versions_of_Windows_does_PostgreSQL_run_on.3F już powiedział mi, że mam złą wersję PostgreSów, ponieważ wydano 8.4 przed Windows 7 ... dzięki Reno! :)) – AJP

+0

Cieszę się, że mogłem pomóc! – Reno

2

Odpowiedź od AJP jest poprawna z małą ponowną konfiguracją. Linia

database: db/development 

nie działa dla mnie. muszę go zmienić na

database: development 

Używam tego dla Ruby on Rails dla polecenia

rake db:create 

i

rake db:migrate 

pracować