如何指定要使用的rails的postgres副本

时间:2015-02-09 21:51:18

标签: ruby-on-rails postgresql ruby-on-rails-4 heroku puma

如何指定postgres rails使用的版本?当我运行puma并转到localhost:3000时出现错误

PG::ConnectionBad
fe_sendauth: no password supplied

我认为正在使用的副本可能是手动安装9.3,就像我运行时一样:

/usr/local/Cellar/postgresql/9.4.1/bin/pg_ctl -D /usr/local/var/postgres start

我收到错误:

stgres start
server starting
LOG:  skipping missing configuration file "/usr/local/var/postgres/postgresql.auto.conf"
FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.3, which is not compatible with this version 9.4.1.

我在我的系统上找到了pg_hba.conf的三个副本:

/Library/PostgreSQL/9.3/data/pg_hba.conf
/Users/lasernite/Library/Application Support/Postgres/var-9.4/pg_hba.conf
/usr/local/var/postgres/pg_hba.conf

我认为第一个来自某个时候的手动安装。第二个可能只是一些支持副本/可忽略,第三个是自制安装。

如何让rails使用自制的postgres安装,即使这意味着擦除本地数据库?只要heroku上的生产是真的,这就好了。

我已经停留了几天,将我的开发环境从sqlite重新配置为postgres,这是非常有问题的,因为我现在有一个生产数据库和网站,这迫使我做一些代码推送而不能在本地验证功能,但在很大程度上完全削弱了我进行任何开发的能力。

请帮助我!

1 个答案:

答案 0 :(得分:9)

看起来问题是当数据库由9.3.x创建时,你正在启动9.4.1。

Rails使用的posgres版本应该是正在运行的版本。因此,如果您想在9.3.x版本中启动postgres,那么您应该启动该版本。但是您必须为该版本指定正确的路径。

你得到了什么输出?

> initdb --version
> pg_ctl --version
> postgres --version
> psql --version

它应该都是一样的。如果它说9.4.x并且您想要使用该版本,那么您可以像这样重新启动数据库:initdb -D /usr/local/var/postgres-4.1然后您可以启动postgres postgres -D /usr/local/var/postgres-4.1。这样做,您可能会丢失本地数据库,因为听起来这些数据是由9.3.x创建的。

或者,如果那些输出9.3.x,那么您应该只能使用没有二进制文件的完整路径的命令:postgres -D /usr/local/var/postgres

如果您使用的是9.4.x,并且希望继续使用9.3.x,请尝试which postgres。它可能指向/usr/local/bin。然后确保这只是自制版本的链接。 ls -la /usr/local/bin | grep "postgres ->"

如果您使用自制程序版本,则可以brew switch postgres 9.3.x告诉自制程序使用该版本。然后你应该可以用postgres -D /var/local/var/postgres开始postgres。