升级到OSX 10.7 Lion后修复Postgresql

Dav*_*e G 196 postgresql macos ruby-on-rails ruby-on-rails-3 osx-lion

我最近升级到OSX 10.7,此时我的rails安装在尝试连接到psql服务器时完全被堵塞了.当我从命令行使用时

psql -U postgres
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是当我尝试使用相同的用户名和密码运行rails服务器或控制台时,我收到此错误

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)

任何可能发生的想法都会非常有用!谢谢!

Joh*_*ang 291

这是一个PATH问题.Mac OSX Lion现在包含系统中的Postgresql.如果你这样做,which psql你可能会看到usr/bin/psql而不是usr/local/bin/psqlHomeBrew的正确版本.如果你运行,brew doctor你应该收到一条消息,说明你需要添加usr/local/bin到PATH env变量的头部.

编辑.bash_profile或.profile,或者您正在使用的任何shell并添加: export PATH=/usr/local/bin:$PATH

作为当时的第一个导出PATH要么退出shell会话,要么用你的文件来源source ~/.bash_profile,现在它应该再次正常.

  • 另外,请注意,如果您在修复路径之前安装了pg gem,它将使用错误的psql.如果是这样,卸载pg gem然后重新安装它(gem uninstall pg && gem install pg). (153认同)
  • 这解决了它.您还可以编辑/ etc/paths并确保/ usr/local/bin位于顶部 (12认同)
  • 这是自制的吗?端口似乎把它在中:/ opt/local/lib目录/ postgresql91因此,请确保您使用的出口PATH = /选择/ local/lib目录/ postgresql91 /斌:$ PATH (4认同)
  • 只是为了澄清 - 看起来你最好正确设置你的路径,然后卸载/重新安装pg gem (2认同)

Dav*_*e G 90

对于那些感兴趣的人,我拼凑了解决方案.我只需要添加

host: localhost
Run Code Online (Sandbox Code Playgroud)

到我的环境的database.yml,所有都是肉汁.

  • 请注意:此设置将从域套接字的访问权限更改为TCP连接.虽然它可能有效,但您可能会丢失机器上的一些性能和可用端口,这可能是一个问题,具体取决于您的设置.约翰提供的解决方案是正确的. (9认同)
  • 'gem uninstall pg'(选择所有版本),然后'捆绑'再次安装你的Gemfile中的pg版本. (3认同)

Ben*_*Ben 46

我对Mountain Lion遇到了这个问题,但唯一对我有用的是这个修复:

检查实际目标的位置:

sudo find / -name .s.PGSQL.5432
Run Code Online (Sandbox Code Playgroud)

我需要创建这个目录:

mkdir /var/pgsql_socket/
Run Code Online (Sandbox Code Playgroud)

然后使用上面的find中的结果创建此符号链接:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
Run Code Online (Sandbox Code Playgroud)

我怀疑对于Mountain Lion上的大多数人来说,你可以创建dir并执行符号链接,而不是浪费时间进行查找,除非符号链接不起作用.

PS - 我的PostgreSQL是通过官方安装程序安装的.


小智 29

如果问题在改变路径后仍然存在(就像它对我而言),也可以试试这个...

gem pristine pg
Run Code Online (Sandbox Code Playgroud)

似乎(部分)问题在于pg gem本身.在构建时,它会确定域套接字应该在哪里.如果更改域套接字的位置,则在重建gem之前它似乎不会生效.


小智 15

对于直接从官方安装程序安装的用户,只需将主机添加到该命令即可,无需更改路径:

psql -h localhost -U postgres
Run Code Online (Sandbox Code Playgroud)


vla*_*iim 5

我遇到了同样的问题,并且在让John Wang的解决方案工作时遇到了问题.正如Darren所说,pg gem存在问题.为了使它工作,我需要:

gem uninstall pg
Run Code Online (Sandbox Code Playgroud)

然后重新安装.

哪有它的工作.