2011-12-26 2 views
56

응용 프로그램에 Heroku를 사용하고 있으며 PostgreSQL이 필요하지만 SQLite3을 개발 용으로 사용할 수는 있습니다. 헤로 쿠 (Heroku)가 2 개의 서로 다른 데이터베이스를 가지고 있다고 강력하게 권고 한 이래로 저는 개발을 위해 PostgreSQL로 변경하기로 결정했습니다. gem pg을 설치하고 공식 PostgreSQL 사이트로 이동하여 Windows 설치 프로그램을 가져오고 또한 database.yml을 변경했습니다. 설치 중에는 PostgreSQL에 암호가 있어야하므로 암호를 만들었습니다. pg_hba.conf 파일을 md5에서 trust으로 변경하여 데이터베이스를 만들 때 fe_sendauth: no password supplied을 가져와야합니다. 하지만 그 치우는 후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 

, 지금이 얻을 :

$ 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} 

난 아직도 내 development.sqlite3text.sqlite3 선물을해야합니까, 그게 문제가 될 수 있을까? 무엇을해야합니까? https://gist.github.com/1522188

답변

118

내가 자리 표시 자 app_name를 사용하는 것뿐만 아니라, 사용자 이름으로 응용 프로그램의 이름 (또는 이름의 일부 변종)를 사용할 수 있습니다, 당신의 database.yml에 사용자 이름을 추가 : 여기

내 전체 요점입니다 :

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

그럼 psql.exe를 사용 PostgreSQL의 내부 사용자 (AKA "역")를 작성 :

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

첫 번째 줄은 터미널에 있고 다음 두 줄은 psql 안에 있습니다. 그런 다음 rake db:create을 수행하십시오.

User 사용자는 아마도 기본하지만 사용자 이름으로 User을 사용하기를 원한다면 당신이 사건을 보존하기 위해이를 인용해야 할 것이다, 그래서 PostgreSQL의 다른 목적 user is already taken입니다 : 당신은

postgres=# create role "User" login createdb; 

어쨌든 한 응용 프로그램 당 하나의 사용자를 만드는 것이 좋습니다.

test 항목에 대해 비슷한 사항을 database.yml에 입력하고 싶습니다.

+1

psql.exe 안에 들어 가지 못하게합니다. 열려고하면 창이 나타나서 자동으로 닫히고 cmd 프롬프트로 가서'c : \ Program Files .. \ .. \ bin> psql.exe> ​​psql : FATAL : 역할 "사용자가 존재하지 않습니다'다시 '치명적인'. 어떤 아이디어? – LearningRoR

+1

@wrbg : 설치 중에'postgres' 사용자를 만들었습니까? 'psql -d postgres -U postgres'를 실행하십시오. 암호가 필요하시면'psql -d postgres -U postgres -W'를 입력하십시오. –

+0

설치하는 동안 사용자에게 묻지 않았습니다. 다시 설치해 봅시다. – LearningRoR

6

usernameconfig/database.yml에 지정되어 있지 않으면 PostgreSQL이 계정 (로그인) 이름으로 데이터베이스를 만들려고합니다. OS X 및 Linux에서는 whoami으로 누구인지 확인할 수 있습니다. Windows를 사용하는 것 같습니다.

해결책 A : Create a PostgreSQL user과 일치하는 찾습니다. 예를 들어

createuser --superuser some_user 

솔루션 B : 변경 명시 적으로 사용자 이름 as shown in mu's answer을 설정하여 DB 사용자입니다.

+0

Youdaman! 이것은 나를 위해 일한 유일한 사람이었습니다. –

+0

정말'--superuser'가 필요하거나'-d'만큼 충분합니까? – Meekohi

4

예를 들어 postgres라는 사용자의 컴퓨터에 특정 계정/사용자가있는 경우.

그러면이 명령을 실행하면 역할 이름을 입력하라는 메시지가 나타납니다.

sudo -u postgres createuser --interactive 

는 그런 일을해야

rake db:create 

을하고!

관련 문제