我正在学习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
有什么想法?感谢!!!
答案 0 :(得分:1)
您是不是真的没有设置用户名和密码,或者为了安全起见而忽略了它?您的凭据似乎丢失或不正确。确保您指定了正确的用户名和密码。您可能还想指定一个端口。
例如,请尝试以下操作:
adapter: postgresql
database: sample_app
hostname: 127.0.0.1
port: 5432
username: USERNAME
password: PASSWORD
您需要将USERNAME
和PASSWORD
替换为设置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
像魅力一样工作!