1

我正在学习 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

有什么想法吗?谢谢!!!

4

3 回答 3

1

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

例如,尝试以下操作:

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

您需要用设置 Postgres 服务器时使用的值替换USERNAME和。PASSWORD

于 2013-05-25T05:50:36.813 回答
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"?

... 表示Ruby 中的 Pg gem 使用的 ,由于文件系统权限问题libpq,无法打开 unix 套接字。/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 连接来解决有关 unix 套接字和 Pg 的 Mac 问题。只需在您的数据库 yml 中host指定;localhost这将导致建立 TCP/IP 网络连接而不是 unix 套接字连接。

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

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

于 2013-05-25T10:17:39.290 回答
0

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

像魅力一样工作!

于 2013-06-08T15:53:36.017 回答