无法在本地连接到Postgresql服务器

时间:2014-08-24 19:54:23

标签: ruby-on-rails postgresql heroku

我有一个Rails应用程序,它一直在为数据库使用sqlite3。部署到Heroku。然后发现Heroku建议切换到PostgreSQL。所以现在我试图切换没有运气。 Was trying to use this Railscasts video for help

我安装了Homebrew。通过Homebrew安装PostgreSQL。安装后,没有提到为postgres创建用户名或密码。

我将我的Gemfile编辑为

gem 'pg'

用于生产和开发,并bundle install

我将database.yml文件编辑为:

development:
  adapter: postgresql
  database: isement_dev
  encoding: unicode
  pool: 5
  timeout: 5000

test:
  adapter: postgresql
  database: isement_test
  encoding: unicode
  pool: 5
  timeout: 5000

production:
  adapter: postgresql
  database: isement_production
  encoding: unicode
  pool: 5
  timeout: 5000

就像Ryan在视频中所说的那样,我尝试这个命令:

rake db:create:all

只是为了得到这个错误:

could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

我还做了一些搜索,看到一些教程显示了database.yml文件中包含的用户名和密码。然后我会了解如何setup a user for Postgresql

输入命令$ createuser joe后,我从未获得过医生说你会被问到的选项。比如"新角色应该是超级用户吗? (Y / N)"所以真的不确定用户是否已创建,但也没有任何错误。

所以,我假设在创建用户" joe"之后,我重新编写了我的database.yml文件以包含我刚刚创建的用户字段:

 development:
   adapter: postgresql
   database: isement_dev
   encoding: unicode
   pool: 5
   timeout: 5000
   username: joe
   password:

 test:
   adapter: postgresql
   database: isement_test
   encoding: unicode
   pool: 5
   timeout: 5000

只是仍然得到无法连接的相同错误。

我已经运行了命令

 pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

确保服务器正在运行。

以防万一需要,当我跑步时

which psql

我收到了这个:

 /usr/local/bin/psql

我有什么遗失的东西吗? "数据库名称" database.yml file的一部分。这应该是已在某处创建的数据库,或者在运行rake db:create:all命令时此文件是否创建了数据库?我假设后者,所以数据库的名称并不重要?

2 个答案:

答案 0 :(得分:4)

懒惰选项:将host: localhost添加到您的database.yml

只有稍微不那么懒的选项:卸载并重新安装pg gem。

这里发生了什么? Postgres有很多方法已经存在于你的系统中,如果你在安装自己的Postgres副本之前安装gem,pg gem将使用他们的pg_config输出并构建它们的需求。

在您的情况下,它是为某些Mac OS X版本附带的版本构建的,它使用/var/pgsql_socket处的套接字文件。

答案 1 :(得分:0)

当您通过Homebrew安装Postgres时,它会将您的用户名添加到postgres并使用空密码。

只需打开命令提示符并输入

即可
whoami

然后使用空密码将database.yml更改为您的mac用户名(无论是从whoami返回的内容)。

也许添加主机:localhost 你的database.yml