升级到OSX 10.7 Lion后修复Postgresql
我最近升级到了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"?
任何想法可能会发生什么将是超级有益的! 谢谢!
这是一个PATH问题。 Mac OSX Lion现在在系统中包含Postgresql。 如果你做了一个which psql
你可能会看到usr/bin/psql
而不是usr/local/bin/psql
,这是HomeBrew的正确的。 如果您运行brew doctor
您应该会收到一条消息,指出您需要将usr/local/bin
添加到PATH envvariables的头部。
编辑你的.bash_profile或.profile,或者你正在使用的shell,并添加: export PATH=/usr/local/bin:$PATH
作为PATH
的第一个输出,然后要么退出你的shell会话或源文件source ~/.bash_profile
,它现在应该再次确定。
对于那些有兴趣的人,我拼凑了解决scheme。 我所需要的只是添加
host: localhost
到我的环境database.yml,都是肉汁。
我在Mountain Lion遇到了这个问题,但唯一能解决这个问题的是这个问题 :
检查实际目标在哪里:
sudo find / -name .s.PGSQL.5432
我需要创build这个目录:
mkdir /var/pgsql_socket/
然后使用上面find的结果创build这个符号链接:
ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
我怀疑,对于大多数山狮的人,你可以创build目录,并做符号链接,而不是浪费时间做这个发现,除非符号链接不工作。
PS – 我的PostgreSQL是通过官方安装程序安装的。
如果问题仍然存在,改变了path(就像我这样做),也请试试这个…
gem pristine pg
看来问题(部分)在于gem本身。 当它build立时,它会计算出域套接字的位置。 如果更改了域套接字的位置,那么在重buildgem之前似乎不会生效。
对于直接从官方安装程序安装的用户,只需将主机添加到该命令即可,不会更改path:
psql -h localhost -U postgres
我遇到了同样的问题,并且在解决John Wang的解决scheme时遇到了问题。 正如Darren指出的那样,pggem有一个问题。 为了得到它的工作,我需要:
gem uninstall pg
然后重新安装。
这是它的工作。
我碰到了这个,但是我自己安装了postgres(不是自制的)。 如果是这样的话,你需要findpsql的旧path(可能是/ usr / local / bin,但是对于我来说是/ usr / local / pgsql / bin)并且将其前置到$ PATH中。
(之前) which psql
=> / usr / bin / psql
(修复)export PATH = / usr / local / psql / bin:$ PATH
(之后)`which psql'=> / usr / local / psql / bin
John Wang的build议是在source ~/.bash_rc
之后添加到你的bash_rc文件中是很好的。
这是为自制吗? 港口似乎把它放在:
/opt/local/lib/postgresql91
所以确保你使用导出
PATH=/opt/local/lib/postgresql91/bin:$PATH
Mac端口问题: https : //trac.macports.org/ticket/30125
我不满意最高的答案,因为它们要么是操作系统用户特定的,要么重新映射Postgres来使用TCP而不是域套接字,正如@pilif指出的那样。 我已经看到了另一个解决scheme,它涉及在系统级别重新sorting默认path,以便在核心系统path之前检查Brew的path,但这看起来很危险,因为它可能会影响所有其他应用程序名称冲突。
这个网站详细介绍了我的同事find的解决scheme。 这涉及到执行一个单一的shell脚本
- 在一个单独的目录下备份Postgres 8.4文件
- 将Brew的安装Postgres符号链接到位
这与警告,系统默认的Postgres是无论brew已安装,所以你必须作出判断呼吁,是否适合你。 我没有看到自己需要Postgres 8.4而不是9.x,而是YMMV
另一个可行的解决scheme是通过删除postmaster文件重新设置。 只需运行:
rm /usr/local/var/postgres/postmaster.pid
这是值得检查日志中的错误,你可以在这里find:
/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"?
一切都很好,事后。
在我的情况下,服务器没有启动,因为共享内存设置错误。 起初我很困惑,因为有几个postgres进程正在运行,但那些是标准的系统进程。 寻找postmaster
stream程!
我所需要做的就是改变共享内存设置 。 在我的情况下不需要摆弄path设置。
您可能需要指定数据库的主机。
如果您喜欢$ 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
。
我是Rails新手,但添加以下内容到database.yml为我工作:
host: localhost port: 5432
不知道为什么Rails默认使用域套接字而不是TCP,而PostgreSQL默认情况下不设置域套接字。
我的PostgreSQL安装在/ Library / PostgreSQL中,所以/ usr / var的东西不适合我。
看来,Woz是正确的,因为每当我closures我的MacBook Pro的盖子崩溃…这是什么工作后崩溃对我来说:
sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"