6

我正在尝试创建一个使用 PostgreSQL 的 Rails 应用程序。这是我所做的事情的描述。


PostgreSQL 设置:我通过 Martin Pitt 维护的ppa:pitti/postgresql
安装了 PostgreSQL 9.1.3 。之前安装了 PostgreSQL 8.4;我不确定它是否仍然安装或消失。

  • 我向与我的 Ubuntu 帐户同名的数据库添加了一个具有超级用户权限的数据库用户。
  • 我用sudo service postgresql start.
  • 我通过 Gerfried Fuchs 维护的 ppa:rhonda/pgadmin3 安装了pgadmin3 ,版本1.14.0 Beta 1 。
  • 我可以使用我的用户帐户和密码以及端口 5433 通过 pgadmin3 进行连接。

我在pg_hba.conf中的 postgres 配置如下(为了便于阅读,删除了注释)。

[...]
local   all             postgres                                peer
local   all             all                                     peer
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

Rails 设置:
现在我想创建一个使用 PostgreSQL 的 Rails 应用程序。

  • 我通过 RVM 安装了 Ruby 1.9.3-p125。
  • 我将 Rails 3.2.3 安装到 Gemset ruby​​-1.9.3-p125@global。
  • 我为应用程序创建了一个 .rvmrc 和 Gemset。
  • 我通过rails new my_test_app -d postgresql.
  • 我在config/database.ymluser中配置了名称和用于developmenttest并删除了productionpassword
  • 我在config host: localhost/ database.yml中进行了配置。port: 5433

这是我的config/database.yml的内容(为了便于阅读,删除了注释)。

development:
  adapter: postgresql
  encoding: unicode
  database: my_test_app_development
  pool: 5
  username: johndoe
  password: password    
  host: localhost
  port: 5433

test:
  adapter: postgresql
  encoding: unicode
  database: my_test_app_test
  pool: 5
  username: johndoe
  password: password

问题:
但是,当我运行时,bundle exec rake db:create:all我收到以下错误消息。

could not connect to server: No such file or directory
Is the server running locally and accepting connections on Unix domain socket
"/var/run/postgresql/.s.PGSQL.5432"?
[...]
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode",
"database"=>"my_test_app_test", "pool"=>5, "username"=>"johndoe",
"password"=>"password"}

问题:
为什么我通过 pgadmin3 成功连接时使用的端口与我使用的端口不同?

4

4 回答 4

20

@Riateche:最后,我看到测试环境的数据库配置缺少hostport的显式设置。将设置添加到测试环境后,我能够bundle exec rake db:create:all成功运行命令。
我必须说,我不喜欢他们为开发环境建议这些设置,但没有为其他环境添加它们。正如我所证明的那样,这很可能会错过它们。

test:
  adapter: postgresql
  encoding: unicode
  database: my_test_app_test
  pool: 5
  username: johndoe
  password: password
  host: localhost
  port: 5433
于 2012-04-21T23:57:00.247 回答
1

如果任何psql客户端会话正在访问 template1 (例如psqlpgAdmin), 则rake db:migrate 失败。在执行之前关闭所有会话 rake db:migrate

于 2012-08-22T18:01:44.453 回答
1

您可以将 pg_hba.conf 中的 postgresql 配置更改为信任。

[...]
local   all             postgres                                peer
local   all             all                                     trust
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5
于 2016-04-21T04:44:56.420 回答
0

我有同样的问题,我通过运行这个解决方案来解决它

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
于 2020-11-20T21:32:01.627 回答