2013-05-25 5 views
1

저는 레일을 배우고 Ruby on Rails Tutorial Book을 따르고 있습니다.레일즈 : postgreSQL로 전환 한 후 rspec이 실패했습니다.

기본 SQlite3 대신 postgreSQL을 사용하는 방법에 대해 더 많은 어려움을 겪었습니다. 그러나

, 내가 실행 해요 .. SQLite는 함께

작동 않았다 실패 나의 RSpec에 테스트를 PostgreSQL을 변경 한 이후 : bundle exec rspec spec/requests/static_pages_spec.rb 을하고 반환 값 :

Failure/Error: Unable to find matching line from backtrace 
    PGError: 
     could not connect to server: Permission denied 
     Is the server running locally and accepting 
     connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

이 내가 가진 무엇 테스트 용 내 database.yml에서 :

test: 
    adapter: postgresql #sqlite3 
    database: sample_app #db/test.sqlite3 
    pool: 5 

어떤 생각? 감사!!!

+0

database.yml 파일에 postgresql db에 대한 모든 업데이트 된 cred가 있는지 확인하십시오. 또는 database.yml을 여기에 붙여 넣으십시오. – Trip

+0

당신은 분명히 분명히해야합니다 ... 1. * 당신이 "postgreSQL로 바꾸기 위해"한 것과 2. 응용 프로그램이 변경된 환경 밖에서 제대로 작동합니까? 그리고 테스트를 실행할 때 실패합니다. 또는 앱이 브라우저에서 작동하지 않습니까? –

+0

@Trip 난 database.yml에 테스트 코드를 추가 했으니 까. – Reuben

답변

1

정말로 사용자 이름과 암호를 설정하지 않습니까? 아니면 보안을 위해 사용자 이름과 암호를 생략 했습니까? 자격 증명이 누락되었거나 정확하지 않은 것으로 보입니다. 올바른 사용자 이름과 암호를 지정했는지 확인하십시오. 포트를 지정할 수도 있습니다.

예를 들어, 다음을 시도하십시오

adapter: postgresql 
database: sample_app 
hostname: 127.0.0.1 
port: 5432 
username: USERNAME 
password: PASSWORD 

당신은 당신이 당신의 포스트 그레스 서버를 설정할 때 사용 TEH 값 USERNAMEPASSWORD를 교체해야합니다.

+0

나는 postgreSQL을 설정하기 위해이 작업을 수행했습니다. 아무 것도 사용자 이름과 암호가 필요하지 않습니다. 'http : // postgresapp.com/documentation' 어떻게 추가하나요? 포트와 동일합니다. 기본값을 사용하고 있습니다. 5432 – Reuben

+0

@Reuben 로컬로 실행하고 있습니까? – Trip

+0

예, 앱이 크롬에서 제대로 작동하지만 내 테스트가 작동하지 않는 것처럼 보입니다. – Reuben

0

이것은 흥미로운 문제입니다. 오류 당신이 얻고는 :

PGError: 
     could not connect to server: Permission denied 
     Is the server running locally and accepting 
     connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

... 루비의 대학원 보석으로 사용 libpq이 때문에 파일 시스템 권한 문제의 /var/pgsql_socket/.s.PGSQL.5432에 유닉스 소켓을 열 수 없음을 나타냅니다. 사용자가 /var/pgsql_socket/에 대한 충분한 권한을 갖고 있지 않은 것 같습니다. Mac OS X이 소켓 자체에 권한을 허용하는 경우 /var/pgsql_socket/.s.PGSQL.5432 자체에 대한 권한 일 수 있습니다. 소켓 파일이 사용 권한을 가질 수없는 Linux를 사용하고 OS X가 다른지 여부를 알 수 없습니다.

시도 :

ls -ld /var/pgsql_socket/.s.PGSQL.5432 
ls -ld /var/pgsql_socket 
ls -ld /var 

당신은 보통 TCP/IP 연결을 사용하여 유닉스 소켓 및 대학원과 맥 문제를 해결할 수 있습니다. 데이터베이스 yml에 hostlocalhost으로 지정하면됩니다. 이로 인해 유닉스 소켓 연결보다는 TCP/IP 네트워크 연결이 만들어집니다.

실행중인 PostgreSQL 서버와 일치하지 않는 libpq를 사용할 수도 있습니다. 이것은 일부 시스템 버전에서 기본적으로 PostgreSQL의 맞춤형 이전 버전을 설치했기 때문에 OS X에서 일반적입니다. 그렇다면 Stack Overflow (태그 'osx', 'rails', 'postgresql'검색)에 관한 문제에 대한 많은 정보가 있으므로 여기에서 반복하지 않을 것입니다. TCP/IP를 사용하는 것은 해결 방법입니다. host을 실행중인 PostgreSQL 서버의 unix_socket_path으로 지정합니다.

PostgreSQL이 실제로 실행되지 않는 경우 connection refused으로 실패 할 수 있습니다.

+0

이것이 내가 얻은 것입니다 : https://gist.github.com/reubenpressman/e491f2d2025be5ba3679 – Reuben

+0

@Reuben 그러면 PostgreSQL 소켓은'_postgres' 사용자 만 읽을 수 있습니다. 이것은 Postgres.app가'_postgres' 사용자가 아닌 사용자 계정으로 실행되기 때문에 틀린 libpq를 확실히 사용하고 있다는 것을 말해줍니다. Postgres.app의 libpq에 대해 Pg 보석을 다시 만들거나 Postgres에 대해'psql'에'SHOW unix_socket_directory'를 실행하십시오. .app PostgreSQL을 실행하고'host'를 결과 디렉토리로 설정하십시오. 빠른 검색 (테스트 할 OS X가 없음)은 Postgres.app에 대해/tmp를 제안합니다. –

관련 문제