我最近升级到OSX 10.7,此时我的rails安装在尝试连接到psql服务器时完全被堵塞了。当我使用
从命令行执行此操作时psql -U postgres
它完全正常,但当我尝试使用相同的用户名和密码运行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"?
任何可能发生的想法都会非常有用!谢谢!
答案 0 :(得分:291)
这是一个路径问题。 Mac OSX Lion现在包含系统中的Postgresql。如果您执行which psql
,您可能会看到usr/bin/psql
而不是usr/local/bin/psql
,这是HomeBrew的正确答案。如果您运行brew doctor
,您应该会收到一条消息,指出您需要将usr/local/bin
添加到PATH env变量的开头。
编辑你的.bash_profile或.profile,或者你正在使用的任何一个shell并添加:
export PATH=/usr/local/bin:$PATH
作为PATH
的第一个导出,然后退出shell会话或使用source ~/.bash_profile
来源文件,现在它应该再次正常。
答案 1 :(得分:90)
对于那些感兴趣的人,我拼凑了解决方案。我只需要添加
host: localhost
到我的环境的database.yml,所有都是肉汁。
答案 2 :(得分:46)
我对Mountain Lion遇到了这个问题,但唯一对我有用的是this fix:
检查实际目标的位置:
sudo find / -name .s.PGSQL.5432
我需要创建这个目录:
mkdir /var/pgsql_socket/
然后使用上面的find中的结果创建此符号链接:
ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
我怀疑对于Mountain Lion上的大多数人来说,你可以创建目录并执行符号链接,除非符号链接不起作用,否则不要浪费时间进行查找。
PS - 我的PostgreSQL是通过官方安装程序安装的。
答案 3 :(得分:15)
对于直接从官方安装程序安装的用户,只需将主机添加到该命令即可,无需更改路径:
psql -h localhost -U postgres
答案 4 :(得分:5)
我遇到了同样的问题,并且在让John Wang的解决方案工作时遇到了问题。正如Darren所说,pg gem存在问题。为了让它成功,我需要:
gem uninstall pg
然后重新安装。
哪个有效。
答案 5 :(得分:3)
我也碰到了这个,但我自己安装了postgres(不是自制软件)。如果是这种情况,你需要找到psql的旧路径(可能是/ usr / local / bin,但对我来说是/ usr / local / pgsql / bin)并将其添加到$ PATH。
(前)
which psql
=>的/ usr /斌/ PSQL
(FIX) export PATH = / usr / local / psql / bin:$ PATH
(后) `哪个psql'=>的/ usr /本地/ PSQL / bin中
John Wang建议source ~/.bash_rc
之后你将它添加到你的bash_rc是很好的。
答案 6 :(得分:3)
这是自制软件吗? Ports似乎把它放进去了:
/opt/local/lib/postgresql91
因此请确保使用导出
PATH=/opt/local/lib/postgresql91/bin:$PATH
答案 7 :(得分:1)
我对最受欢迎的答案感到不满,因为他们要么是特定于操作系统用户,要么重新映射Postgres以使用TCP而不是域套接字,正如@pilif所指出的那样。我已经看到另一个解决方案,涉及在系统级别重新排序默认路径以检查核心系统路径之前的Brew路径,但这似乎很危险,因为它可能会影响所有其他应用程序名称冲突,如此之一。
This site详细说明了我的同事找到的解决方案。它归结为执行一个
的shell脚本这有一点需要注意,系统默认Postgres是brew安装的,所以你必须判断一下这是否适合你。我不认为自己需要Postgres 8.4专门用于9.x,而是YMMV
答案 8 :(得分:1)
另一个可行的解决方案是通过删除它来重置postmaster文件。只需运行:
rm /usr/local/var/postgres/postmaster.pid
值得查看日志中的错误,您可以在此处找到:
/usr/local/var/postgres/server.log
我遇到的错误信息是:
FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 161) running in data directory
"/usr/local/var/postgres"?
之后一切都很顺利。
答案 9 :(得分:0)
在我的情况下,由于共享内存设置错误,服务器无法启动。起初我很困惑,因为有几个postgres进程在运行,但那些是标准的系统进程。寻找postmaster
进程!
我需要做的就是change the shared memory settings。在我的案例中,不需要摆弄路径设置。
答案 10 :(得分:0)
如果您希望对 $ PATH 进行永久性更改,请尝试以下操作:
defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"
这将重写您的~/.MacOSX/environment.plist
。
答案 11 :(得分:0)
您可能需要指定数据库的主机。
答案 12 :(得分:0)
我是Rails的新手,但是将以下内容添加到 database.yml 对我有用:
host: localhost
port: 5432
不确定为什么Rails默认使用域套接字而不是TCP,而PostgreSQL默认情况下不会设置域套接字。
答案 13 :(得分:0)
我的PostgreSQL安装在/ Library / PostgreSQL中,这样/ usr / var的东西对我来说都不起作用。
似乎Woz是正确的,因为每当我关闭我的macbook pro的盖子时它就会崩溃...... 以下是我崩溃后的工作原理:
sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"