几个月来,我的开发Mac上的ruby(sinatra)应用程序"foo.rb"一直在使用远程Heroku托管的Postgres数据库。
该应用程序不使用任何本地数据库,无论是在开发还是生产中。
对于另一个项目,我从Heroku安装了Postgress.app,首先按照建议删除了一个非常旧的版本,使用brew remove postgresql
下一次我运行foo.rb,并尝试使用SomeModel.count访问(远程)数据库时,我得到了错误:
PG::ConnectionBad:FATAL:主机、用户、数据库没有PG_hba.conf条目,SSL关闭
我很困惑为什么当数据库连接配置指向远程postgres url时,错误显示我的devt机器地址,以及为什么它说SSL关闭。
有没有想过如何消除这个错误?有没有办法查看它抱怨的pg_hba.conf的PATH,这样我就可以验证它是否包含正确的主机条目?
(我想知道pg宝石是否有自己的副本藏在某个地方。)
我能找到的pg_hba.conf的副本(在旧版和新版Postgress.app的/Library/ApplicationSupport/XXX中)都有正确的(未更改的)主机条目。
看起来您的脚本试图连接未正确配置的地方
在这种情况下需要检查的事项:
-
您的database.yml或连接字符串database_URL与postgres.app 中的localhost匹配
-
你的postgres.app正在运行,并且有一个数据库服务器正在运行(检查你的osx顶部栏上的大象图标)
-
如果您正确安装和配置了postgres应用程序,您需要设置路径,您可以在新的终端窗口中键入psql进行检查,如果它运行正常。
配置$PATH以使用包含的命令行工具(可选):
sudo mkdir -p /etc/paths.d &&
echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp
- 在问题中发布您的文件或其中的一部分,这对调试有很大帮助:)
答案是:
- 在Gemfile中注释掉
pg
bundle install
- 替换
pg
bundle install
我怀疑当安装gempg
时,它会动态地建立到postgresql的一些链接,所以如果你移动postgresql(就像我安装Postgres.app时所做的那样),你需要删除pg
gem,然后重新添加它。