Rails:切换到postgreSQL后rspec失败

时间:2013-05-25 05:15:02

标签: ruby-on-rails ruby-on-rails-3 postgresql rspec bundle

我正在学习rails并遵循Ruby on Rails教程书。

它有一个额外的挑战,教我如何使用postgreSQL而不是默认的SQlite3。

但是,由于我已经改为postgreSQL,我的rspec测试失败了,它确实适用于SQlite ..

我正在跑步: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

有什么想法?感谢!!!

3 个答案:

答案 0 :(得分:1)

您是不是真的没有设置用户名和密码,或者为了安全起见而忽略了它?您的凭据似乎丢失或不正确。确保您指定了正确的用户名和密码。您可能还想指定一个端口。

例如,请尝试以下操作:

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

您需要将USERNAMEPASSWORD替换为设置Postgres服务器时使用的值。

答案 1 :(得分: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由Ruby中的Pg gem使用,无法打开/var/pgsql_socket/.s.PGSQL.5432中的unix套接字。您的用户很可能对/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连接解决使用unix套接字和Pg的Mac问题。只需在数据库yml中将host指定为localhost;这将导致建立TCP / IP网络连接而不是unix套接字连接。

您也可能使用与正在运行的PostgreSQL服务器不匹配的libpq。这在OS X上很常见,因为Apple在某些系统版本上默认安装了PostgreSQL的自定义旧版本。如果是这种情况,那么关于Stack Overflow上的问题有很多信息(搜索标签'osx','rails','postgresql'),所以我在此不再重复。使用TCP / IP是一种解决方法,将host指定为正在运行的PostgreSQL服务器的unix_socket_path

如果PostgreSQL实际上没有运行,那么connection refused可能会失败。

答案 2 :(得分:0)

我不得不降级到postgres 9.2.2,我在这里发现: https://github.com/PostgresApp/PostgresApp/issues/109

像魅力一样工作!