【问题标题】:Rails: rake db:create:all fails to connect to PostgreSQL databaseRails:rake db:create:all 无法连接到 PostgreSQL 数据库
【发布时间】:2012-05-03 01:51:35
【问题描述】:

我正在尝试创建一个使用 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, Version 1.14.0 Beta 1
  • 我可以使用我的用户帐户和密码以及端口 5433 通过 pgadmin3 进行连接。

我在 pg_hba.conf 中的 postgres 配置如下(为了可读性删除了 cmets)。

[...]
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 创建了一个Rails 应用程序。
  • 我在 config/database.yml 中为 developmenttest 配置了 user 名称和 password 并删除了 生产
  • 我在config/database.yml中配置了host: localhostport: 5433

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

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成功连接时使用的端口与我使用的端口不同?

【问题讨论】:

  • Rails 应用程序尝试通过 UNIX 套接字而不是 TCP 套接字 localhost:5433 进行连接。如果您正确设置 database.yml,它的行为就不会如此。检查 database.yml 的内容并确保 rails 确实读取了这个文件。请提供 database.yml 的内容。您也可以尝试使用不同的适配器(例如 sqlite)来测试您的设置是否适用。
  • 这是否意味着我不应该使用端口 5433 而是使用 database.yml 中的 5432 作为未注释行?
  • 对于那些通过 Homebrew 安装 PG 并遇到问题的人,我找到了另一个答案。只需卸载 pg gem 并使用 Homebrew 配置重新安装。请参阅stackoverflow.com/a/19609228/1072058 的答案。

标签: ruby-on-rails ruby-on-rails-3 postgresql postgresql-9.1 rails-postgresql


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        test:
          adapter: postgresql
          encoding: unicode
          database: my_test_app_test
          pool: 5
          username: johndoe
          password: password
          host: localhost
          port: 5433
        

        【讨论】:

        • 所有电脑的端口号都一样吗?如果没有,我怎么知道我的端口号?
        • @AmySukumunu 您可以在配置文件中配置端口,您可以在此处找到:/etc/postgresql/<VERSION>/main/postgresql.conf。更多信息here。据我所知,默认端口是 5432。
        • 就我而言,我只需要添加host
        • 大家好,你们使用的是 Linux 操作系统吗?如果我在 windows base 中做我的 rails 项目怎么办?我在哪里可以找到那个 etc 目录
        猜你喜欢
        • 2013-11-20
        • 2017-11-27
        • 2014-03-30
        • 2013-04-19
        • 1970-01-01
        • 2022-12-03
        • 2022-12-05
        • 2012-05-16
        • 1970-01-01
        相关资源
        最近更新 更多