【问题标题】:How to resolve the error 'fe_sendauth: no password supplied' in Rails using PostgreSQL?如何使用 PostgreSQL 解决 Rails 中的错误“fe_sendauth:未提供密码”?
【发布时间】:2015-07-23 16:47:05
【问题描述】:

我尝试使用 postgresql 数据库创建我的 Rails 应用程序,但是当我启动 rails server 时,我收到了这个错误:

fe_sendauth:未提供密码

这是我的操作步骤:

$ sudo apt-get install postgresql postgresql-contrib
$ gem install pg
$ rails new timetracker --database=postgresql --skip-unit-test

我的database.yml 文件如下所示:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  host: localhost
  username: postgres
  password:

development:
  <<: *default
  database: timetracker_development

test:
  <<: *default
  database: timetracker_test

production:
  <<: *default
  database: timetracker_production

这是我的pg_hba.conf 文件:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

# modified by me.
host    all             all             127.0.0.1/32            trust

host    all             all             127.0.0.1/32            trust

host    all             all             ::1/128                 trust

所以,当我执行rails server 时,我得到了错误,然后这就是我这样做的结果:

$ rails c
$ ActiveRecord::Base.connection.instance_variable_get(:@config)

2.1.5 :001 > ActiveRecord::Base.connection.instance_variable_get(:@config) PG::ConnectionBad: fe_sendauth: 未提供密码

来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapter/postgresql_adapter.rb:655:in initialize' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:655:innew' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapter/postgresql_adapter.rb:655:in connect' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:242:ininitialize' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in new' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in postgresql_connection' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:438:in new_connection' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:448:in checkout_new_connection' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in acquire_connection' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:349:in block in checkout' 来自 /home/denis/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/monitor.rb:211:in mon_synchronize' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:348:in checkout' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:263:in block in connection' from /home/denis/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/monitor.rb:211:in mon_synchronize' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:262:in connection' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:571:in retrieve_connection' ... 4 个级别... 从 /home/denis/.rvm/gems/ruby-2.1.5/gems/railties-4.2.3/lib/rails/commands/console.rb:9:in start' from /home/denis/.rvm/gems/ruby-2.1.5/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:68:in console' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:39:in run_command!' from /home/denis/.rvm/gems/ruby-2.1.5/gems/railties-4.2.3/lib/rails/commands.rb:17:in ' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in require' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:inblock in require' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:240:in load_dependency' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:inrequire' 来自 /home/denis/WEB/Rails/ timetracker/bin/rails:8:in <top (required)>' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:268:inload' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:268:in block in load' from /home/denis/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:240:inload_dependency' 来自 /home/denis/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:268:in load' from /home/denis/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:inrequire' 来自 /home/denis/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in require' from -e:1:in'2.1.5 :002 >

我是第一次使用 postgresql,我想我只是做错了什么。

你能帮我解决这个问题吗?

【问题讨论】:

  • 将您的修改移至pg_hba.conf,高于预先提供的修改。你还有一个重复的条目。
  • @ColonelThirtyTwo 不幸的是,这并没有改变任何东西。仍然遇到同样的错误...
  • 也执行sudo service postgresql reload 或重新启动以加载更改
  • @ColonelThirtyTwo,谢谢,我想它有效,但我开始收到新错误:FATAL: database "timetracker_development" does not exist。我真的应该手动创建所有数据库吗(我认为 rails 会为我这样做)?
  • 可能。不熟悉 Rails,但我见过的大多数 ORM 只创建表等,而不是实际的数据库。

标签: postgresql ruby-on-rails-4 ubuntu-14.04 postgresql-9.3


【解决方案1】:

PostgreSQL 按照指定的顺序匹配pg_hba.conf 条目,因此它使用预先指定的host all all 127.0.0.1/32 md5 条目而不是您指定的trust 条目进行身份验证。

将您的自定义 trust 条目移到预先指定的条目之上(并可选择注释掉旧条目),然后通过运行 sudo service postgresql reload(在 Ubuntu 上)或重新启动来重新加载您的配置。

【讨论】:

    【解决方案2】:

    我对这个问题的解决方案是从default: 组中删除host: localhost

    【讨论】:

    • 这个工作的原因是没有定义host Unix 套接字被使用。在身份验证期间,它将匹配pg_hba.conf 中的peer 规则,因此不需要密码(您的用户名whoami 必须与数据库中的角色匹配)。
    【解决方案3】:

    我不知道为什么,但对我来说,这条线并没有解决问题

    host    mydb       myuser         127.0.0.1/32            trust
    

    虽然这个:

    host    mydb       myuser         localhost               trust
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 2016-02-03
      • 2013-08-02
      • 1970-01-01
      • 2020-06-08
      相关资源
      最近更新 更多