2011-08-17 7 views
16

와 함께 사용하기 위해 창에 포스트 그레스를 설치 현재 나는 다음과 같은 오류가 발생합니다 :는 루비 온 레일

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

내 응용 프로그램이 데이터베이스에 액세스하려고합니다.

SQLite 3에 비해 postgres (나는 건강하다고 생각합니다)의 엄격한 요구 때문에 Heroku에서 프로덕션으로 푸시 될 때 정기적 인 응용 프로그램 중단으로 postgres에 대한 SQL 호출을 테스트하려고했습니다. 비슷한 요청 to this Windows 용 레일즈에서 루비와 함께 사용하기위한 포스트그레스 설치법에 대한 최신 튜토리얼이 아닙니다. (7). 나는 다운 로딩과 설치가 20 분이 걸릴 것이라고 생각했지만 2시와 약간의 시간이 지나면 나에게는 아직 가까울 것으로 생각하지 않는다.

다운로드 (사용자에 대한) 경로가되도록 8.4.8-1 from here

내 환경 변수를 설정 포스트 그레스 버전을 설치 : 지금까지 나는했습니다 C:\Ruby192\bin;C:\Program Files (x86)\PostgreSQL\8.4\bin

Gemfile :

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

내 레일 앱에 대해 bundle install을 실행했지만 외관상 성공적으로 설치를 확인하는 쉬운 방법을 찾지 못했습니다.

세트 database.yml을 as suggested here에 :

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

난 내가 into a config files somewhere에 연결 한 후 다른의 .conf 중 하나를 편집 할 수 있습니다 set up a user name and password for Postgres, maybe also start the postgres server, connect to it(?)에 내 로컬 IP 주소에 넣어 필요가 알고 파일 : 'C : \ Program Files (x86) \ PostgreSQL \ 8.4 \ data'등 ...

레일스는 나를 부드럽게 만들었습니다. 나는 생각하는 것 이상의 것이거나 실제로 설치하는 것이 상당히 까다 롭습니다. 그냥 Sqlite3로 돌아 가야하는데, 거기에는 멋진 SQLite Manager 인 Firefox 플러그인도 있습니까?

난 아직도 설치하고 레일에 대한 포스트 그레스를 사용하지만, 지금까지 단지 내가 보는 물건의 가장 혼란 한에 초보자 가이드 찾고 있어요

/시도 (대한 this, this, this, this, this처럼 다음 스노우 레오파드), this (linux).

모든 포인터가 많이 감사하겠습니다. 감사! official PostgreSQL의 문서 - 당신의 연결의

제임스

+0

일을 내가 명령 레일에 루비를 위해 이것을 사용

database: development 

로 변경해야 : //postgrespro.com/windows, 다른 모든 설정 - 일반적인 방법. – prograils

답변

67

레일 3 (3.0.7) 프로젝트 PostgreSQL 데이터베이스로 사용하기 위해 윈도우 7에 포스트 그레스를 설치하기위한 접근 방법.


서문

그래서 제일 먼저 지적 할 것은 포스트 그레스는 .sqlite3에서 단지 다른 파일 확장자되지 않는 것입니다 (이 비트를 건너 뛸 수 있습니다), 그것은 전체 메커니즘은 데이터베이스를 관리하기위한의 . 따라서 클라이언트/서버 모델을 가지고 있습니다.이 중 하나는 Postgres를 레일즈 애플리케이션의 데이터베이스로 사용하도록 설정해야합니다.

거의 힘들이지 않은 sqlite 설정에 비해 Postgres 설정이 상당히 어려워졌습니다. Heroku에 배포하는 경우 현재 Postgres를 사용하고 있으므로 sqlite3에서 SQL 호출 중 일부가 Postgres와 함께 사용되면 중단됩니다 . Postgres를 Heroku 서버에있을 때보 다 로컬에서 디버그하는 것이 훨씬 쉽습니다.

그래서 나는 다음과 같은 일을했습니다 : (면책 조항 : 내가했던 일 중 일부를 포함하는 것을 잊어 버렸을 것입니다 ... 48 시간 동안 통증이 가해져서 작동하도록했습니다 ... if 다음 조언은 당신을 위해 거대한 (2300 페이지 !!) 그러나 very thorough Postgres documentation 도움이 될 것입니다. 어쨌든 나는 당신이 Postgres를 사용하는 것에 대해서 심각하게 생각한다면,). (두 번째 면책 조항 : 필자는 20 가지의 현명한 포스트그레스 가이드 라인을 거의 틀어 쥐고 포스트 그레스 데이터베이스에 보안 구멍을 노출 시켰습니다. 경험있는 포스트그레스 사용자가 동의하지 않는 명백한 것들이 있다면, 저의 게시물)


.Step 1. 다운로드 나는 암호로 모든 기본 옵션 그냥 사용 '비밀'을 유지에만 9.0.x는 윈도우 7에서 지원 될 것이라고 말했다 herehere 때문에에서 PostgreSQL의 v9.0.4-1 설치 Postgres 설치 프로그램이 메시지를 표시 할 때 (인터넷에서 해당 정보를 공유하면 어떤 결과가 나올지 확실하지 않습니다 ...) 곧 알게 될 것입니다. 당신은 경로 (for system, not user (이 상당한인지 아닌지 잘 모르겠어요))가되도록 3.

.Step 2 변경 환경 변수 단계에서이 암호가 필요합니다 C:\Program Files\PostgreSQL\9.0\bin
(브라 반트 I을 따라서 64 비트 윈도우에서 'C : \ Program Files (x86) \ PostgreS ...'에 32 비트 용으로 설치되지 않습니다.)

PostgreSQL \ 9.0 폴더에 대한 액세스 권한을 변경하는 것을 잊지 마십시오 폴더 또는 컨텐트에 대한 기본 읽기 전용 권한을 제거하십시오. (이 기능을 사용하려면 컴퓨터를 다시 시작해야 할 수도 있습니다. 덕분에 @Gavin- 가능성은 낮습니다). 새 데이터베이스를 만들려고하여

.Step 3 테스트 포스트 그레스 설치 : 명령 줄에서 : createdb -U postgres mydb_as_postgres. 먼저 암호를 입력하라는 메시지가 나타납니다. 서버를 먼저 시작해야 할 필요가 없을 수도 있습니다 (이 작업을 수행해야하는지 여부를 기억하지 못합니다). 가장 쉬운 방법은 pgAdmin III를 이용하는 것입니다.이 프로그램은 C:\Program Files\PostgreSQL\9.0\bin과 같은 폴더에 'pgAdmin3.exe'가 있어야합니다. pgAdmin III를 시작하면 왼쪽에 '개체 브라우저'라는 패널이 있어야합니다.

서버 그룹> 서버> PostgreSQL의 9이에서를 가진 나무가 있어야한다.0 (로컬 호스트 : 5432)

'PostgreSQL 9.0 (localhost : 5432)'을 마우스 오른쪽 버튼으로 클릭하고 '연결'을 선택하십시오.

createdb -U postgres mydb_as_postgres 명령은 pgAdmin III를 시작하고 'PostgreSQL 9.0 (localhost : 5432)'을 두 번 클릭하여 확인할 수있는 'mydb_as_postgres'라는 새 데이터베이스를 만들어야합니다. 이 아래가 있어야한다 :

Databases (2) 2 데이터베이스 명령의 -U postgres 부분은 소유자의 같이 포스트 그레스의 사용자로 데이터베이스를 생성하는 포스트 그레스를 알려주기 때문에 내가 _as_postgres 그것을라는 mydb_as_postgrespostgres

라고 기재해야하는 어떤 postgres 사용자로 로그인하지 않았을 때를 지정해야합니다. 나는 'AJames'사용자로 저장된 모든 파일을 보유하고 있지만, 동일하고 다른 사용자로 로그인 할 때 앱을 계속 개발하려면 해당 사용자를 위해 Postgres '역할'을 만들어야합니다 (단계 4).

. 단계 4 through pgAdmin III.

개체 브라우저> 서버 그룹> 서버> (로컬 호스트 : 5432) PostgreSQL의 9.0 : (에 나를 위해하는) 로그인 역할을 마우스 오른쪽 단추로 클릭> 로그인 역할

마우스 오른쪽 단추로 클릭하고 로그인 역할을하고 '새로운 로그인 역할 ... ' 역할 이름에 나를 위해 AJames, 귀하의 운영 체제 사용자 이름을 넣고'역할 권한 '탭에서 암호를 기입, 모든 상자를 선택하지만, 경험이 포스트그레스 사용자 '부모 역할에서 권한 상속'및 '데이터베이스 객체 생성 가능'을 확인하는 것이 좋습니다.하지만 숙련 된 사용자가 아니며 Postgres에서 Rails SQL 호출을 디버그하여 '수퍼 유저'및 '역할을 만들 수 있습니다.'

. 단계 5 이제 postgres 사용자로 로그인하지 않고 새 데이터베이스를 만들 수 있습니다. 입력하십시오 :

createdb mydb_as_user

는 희망이 당신을 위해 작동합니다.

. 단계 6. 그래, 당신은 'db /'디렉토리에 development.sqlite3 파일을 가지고 있습니다. 처음에는 다음 테스트를 sqlite3에서 psql로 변환하는 것으로 설정하려고했습니다.
이 작업을 수행 할 수 없었지만 Heroku.com의 Rails 응용 프로그램에서 필요한 데이터를 필요로하는 솔루션으로 여기에 시도해 보았습니다 (7 단계 이후의 솔루션 참조). Heroku에 로컬 앱만 있고 데이터가없는 사용자는 동일한 접근 방식을 사용할 수 없으므로 다음과 같은 것을 탐색해야 할 수 있습니다.

x6.1 먼저 명령을 시도하여 'psql'을 테스트하십시오. 같은 명령 줄에서 :

psql mydb_as_user

이 다음과 같이 표시되어야합니다 (사용자가 비밀번호를 입력 후) :

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.이 시도 유입은 :

CREATE TABLE users_table (id integer, "name" text);

이 표시되어야합니다 :

개체 브라우저> 서버 그룹> 서버 : 당신이 pgAdmin III에 체크하면

CREATE TABLE 
mydb5=# 

, 당신은 아래에이 표를 참조한다 > PostgreSQL 9.0 (로컬 호스트 : 5432)> 데이터베이스> mydb_as_user> 스키마> 공개> 테이블> users_table>

x6.3 좋아, t 다음 변환하십시오. Downloaded sqlite-shell Windows 용 사전 컴파일 된 바이너리.
x6.4 새 디렉토리를 만들고 'C : \ temp'를 사용하고 sqlite3.exe와 development.sqlite3 파일을 넣습니다.
x6.5 다음 명령 (here)을 사용하여 development.sqlite3 데이터베이스를 Postgres로 덤프하십시오. 내가 pgAdmin III에 가서 개발이 데이터베이스를 만들어, 명령을 다시 시도하고 있어요 그래서

psql: FATAL: database "development2" does not exist

x6.6 : 당신과 같은 오류를 얻을 수 있습니다

sqlite3 development .dump | psql development2

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

내가 말했듯이, 나는 그것을 작동시키지 못했습니다. 그 오류를 해결하는 방법이 있다고 확신하지만 다른 방법을 생각하고 그래서 대신이 솔루션을 사용합니다. (Heroku 계정에 데이터가 있어야하며 탭을 사용하여 psql로 변환합니다 (나는) :

.step 7. 다른 데이터베이스를 만들었습니다. 속성 탭에서 이름을 'development'로 설정하고 소유자는 'AJames'로 변경했습니다 (Windows 사용자 이름으로 바꾸십시오). 권한 탭, 역할 설정 : '대중'과 (그래서 나는 그 필요 확실하지 않아요이 선택 해제로 재설정 생각)에 모든 옵션을 선택

.Step 8이 를 추가합니다. 10 을 gem 파일에 추가하십시오. 이 시점에서도 gem 'sqlite3' 도 삭제하고 싶을 것입니다.

.Step 9 설정 database.yml을 같은 suggested here에 :

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 

당신이 오픈 소스 프로젝트에서 작업하면 암호가 공개 될하지 않으려는 경우는 봐 어떤은의 응답에 Securely providing the database password in a Rails app. 당신의 레일 응용 프로그램의 루트 디렉토리의 실행에서 명령 줄에서

.Step 10 : rake db:migrate 이 새로운 스키마와 포스트 그레스 데이터베이스의 모든 테이블을 생성합니다.

. 단계 11. 명령 줄에서 heroku db:pull을 실행하여 (다시 레일즈 응용 프로그램의 루트 디렉토리에서) 모든 데이터를 새로운 빈 Postgres 데이터베이스로 가져옵니다. 나는이 시점에서 당신의 도청 보석이 당신을 위해이 일을 할 것이라고 생각합니다.


.Step 12 바라건대 단차 (12)가없는! ... 이제 당신을 위해 일해야합니다. 행복한 RoR PostgreSQL 디버깅! 이 오류가 있으면 편집하거나 알려주십시오. 그들이 이 필요할 왜, 어떻게 등을 변경하는 에 대한하는지, 이것은 blog post about Postgres passwords입니다

+1

2 단계에서 환경 변수를 변경 한 후에 추가하려는 경우 컴퓨터를 다시 시작해야합니다. 로그 아웃하고 다시 작동하는 것은 아마도 잘 될 것입니다. 그러나 어쨌든 다시 시작해야하므로 그렇게했습니다. – Gavin

+2

굉장한 글. 많이 도와 줬어. – Ajay

+0

윈도우 7 64x 및 레일즈 4.2.4에서 Postgres 9.5를 실행 중이지만 괜찮습니다. – Matthias

2

없음은 (틀림없이) 가장 유용한 문서로 나타나지 않았다. 나는 최근에 postgresql과 django를 조합하여 리눅스 민트 상자를 구성했다.이 문서의 조합은 these이지만 후자는 Linux에서만 사용된다.

레일스에 관한 것보다는 postgresql 쪽의 유효성 검사에 대해 더 걱정할 것입니다. 말하자면, 질문은 "어떻게 윈도우 7 박스에서 PostgreSQL 서버를 설정하고 테스트 할 수 있습니까?"라는 것입니다. 레일스에 고정시키는 방법을 알아야합니다.

편집 : 아마도 this - 자세한 설치 가이드가있는 공식 postgresql 위키 일 수도 있습니다.

행운을 빈다.

+0

감사합니다. 리노. 이러한 링크는 들어가기에 훨씬 더 좋은 방향으로 보입니다. 나는 어떻게 시작하는지 다시 게시 할 것입니다. (우수, http://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows#What_versions_of_Windows_does_PostgreSQL_run_on.3F는 이미 8.4가 Windows 7 이전에 출시 된 것처럼 잘못된 버전의 포스트그레스를 가지고 있다고 말했습니다 ... 감사합니다 리노! :)) – AJP

+0

다행스럽게 도울 수있어! – Reno

2

AJP의 대답은 작은 설정으로 올바른 것입니다. 라인

database: db/development 

은 나를 위해 작동하지 않습니다. 나는

rake db:create 

rake db:migrate 

는 단순히 HTTPS에서 PostgreSQL을 설치