如何指定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,这是非常有问题的,因为我现在有一个生产数据库和网站,这迫使我做一些代码推送而不能在本地验证功能,但在很大程度上完全削弱了我进行任何开发的能力。
请帮助我!
答案 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。