Postgresql适配器(pg):无法连接到服务器。
Postgresql适配器(pg):无法连接到服务器。
每次运行我的Rails应用程序时,我都会遇到这个错误(无法连接到我的本地Postgresql)。\n/Users/leonardo/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.11/lib/\nactive_record/connection_adapters/postgresql_adapter.rb:1208:in `initialize\': \n无法连接到服务器:没有这个文件或目录(PG::Error)\n服务器是否在本地运行并接受来自Unix域套接字\"/var/pgsql_socket/.s.PGSQL.5432\"的连接?\n我正在使用正确运行的Postgres.app。\n如果我运行\n$ psql\n我可以正确登录到Postgresql控制台。\n$ which psql\n/Applications/Postgres.app/Contents/MacOS/bin/psql\nGemfile\nsource \'https://rubygems.org\'\nruby \"1.9.3\"\ngem \'rails\', \'3.2.11\'\ngem \"pg\"\ndatabase.yml\ndevelopment:\n adapter: postgresql\n encoding: unicode\n username: leonardo\n password: \n database: zapping\n port: 5432\nPostgresql(控制台)\n$ psql\nleonardo=# \\l\n图片描述:https://i.stack.imgur.com/I5eC9.png
问题原因:无法连接到PostgreSQL服务器。
解决方法:删除postmaster.pid文件。
在添加host: localhost后仍然无法解决问题时,可以通过以下命令删除postmaster.pid文件来解决问题:rm /usr/local/var/postgres/postmaster.pid。即使运行brew services start postgresql显示成功,但运行ps x | grep postgres却没有显示运行的服务器。可以按照这里的步骤(包括删除postmaster.pid文件)来解决问题。当计算机崩溃并进行强制关闭,但是postgres没有正确终止时,有时pid文件会卡在那里...删除它有助于重新启动。不要这样做!除非您验证没有运行任何postgres进程,否则不要这样做。这应该很少甚至从不需要;只有当其他进程碰巧分配了postmaster的pid时,它才可能出现。对于本地postgres连接应该没问题。这是我的问题,我不理解上面的回复,为什么要这样做?当服务最终启动时,它会立即为我重新构建。postmaster.pid作为一个互锁,防止一个postgres在另一个正在写入数据库文件时启动。如果您删除它,可能会导致两个(或更多)postgres进程同时写入同一个数据库而不进行协调,从而导致严重的数据库损坏。所以,除非您确保没有其他postgres进程存活并访问相同的数据目录,否则不要这样做。
问题原因:Pg gem是根据Mac OS X预安装的PostgreSQL libpq进行编译的,但是你使用了在较新版本中安装的psql,或者反过来。
解决方法:可以通过在database.yml中添加localhost来指定TCP/IP连接来解决,但最好是根据实际运行的服务器编译Pg gem的libpq。为了做到这一点,在编译之前,你应该能够将PATH环境变量设置为包含正确的pg_config的文件夹。在你的情况下,这将在Postgres.app的某个地方。
Craig,请详细说明一下。我应该在哪里和哪个环境变量中进行设置?
谢谢,这个答案帮助我解决了问题。我采取的步骤很简单:1) gem uninstall pg,2) bundle install,完成。
完美的答案,虽然更新database.yml也可以解决问题,但我认为这可能是解决这个问题的最好和最正确的方法。如果你在安装pg之后通过Homebrew安装了Postgresql,你可能会看到这个错误。然后按照上面的说明进行操作。
Postgresql适配器(pg):无法连接到服务器的问题可能出现的原因是数据库配置文件database.yml中缺少host: localhost
的配置。根据https://stackoverflow.com/a/10793186/919641的回答,可以尝试添加host: localhost
到database.yml文件中来解决该问题。