【问题标题】:Why is rails console ignoring my config/database.yml development: settings?为什么 Rails 控制台忽略我的 config/database.yml 开发:设置?
【发布时间】:2015-11-14 21:44:15
【问题描述】:

我的 database.yml 文件指定了一个非默认数据库:并且没有明确的用户名:。如果我使用 rails c 并尝试访问它失败的任何内容,例如:

2.2.2 :001 > User.connection
ActiveRecord::NoDatabaseError: FATAL:  role "scope" does not exist

如果我尝试使用我的 :development 设置显式连接,我会看到:

2.2.2 :005 >   ActiveRecord::Base.establish_connection :development
 =>
#<ActiveRecord::ConnectionAdapters::ConnectionPool:...
 @config={:adapter=>"postgresql", :encoding=>"unicode", :database=>"scope", :pool=>5, :timeout=>5000, :port=>5432, :username=>"scope", :password=>"...", :host=>"127.0.0.1"},
...

所以它显然忽略了我的自定义数据库和我自己的用户名。奇怪的是,如果我将 yaml 块从 development: 重命名为其他任何名称,例如staging:,我可以与 ActiveRecord::Base.establish_connection :staging 正常连接并访问我的模型。

有人知道会发生什么吗?我没有设置DATABASE_URL 环境变量,因此不能覆盖事物。还有什么可能导致这种行为?

这是实际的 yml:

development:
  adapter: postgresql
  encoding: unicode
  database: mydb_development
  pool: 5
  timeout: 5000
  port: <%= ENV["BOXEN_POSTGRESQL_PORT"] || 5432 %>

还有一个堆栈跟踪:

2.2.2 :002 >   User.count
ActiveRecord::NoDatabaseError: FATAL:  role "scope" does not exist

    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:665:in `rescue in connect'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:655:in `connect'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:242:in `initialize'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `new'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `postgresql_connection'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:438:in `new_connection'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:448:in `checkout_new_connection'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in `acquire_connection'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:349:in `block in checkout'
    from /Users/me/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:348:in `checkout'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:263:in `block in connection'
    from /Users/me/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:262:in `connection'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:571:in `retrieve_connection'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.3/lib/active_record/connection_handling.rb:113:in `retrieve_connection'
... 11 levels...
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/railties-4.2.3/lib/rails/commands/console.rb:9:in `start'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:68:in `console'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/railties-4.2.3/lib/rails/commands.rb:17:in `<top (required)>'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `require'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `block in require'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:240:in `load_dependency'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `require'
    from /Users/me/Documents/projects/deliveries/bin/rails:8:in `<top (required)>'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:268:in `load'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:268:in `block in load'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:240:in `load_dependency'
    from /Users/me/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:268:in `load'
    from /Users/me/.rvm/rubies/ruby-2.2.2/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /Users/me/.rvm/rubies/ruby-2.2.2/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from -e:1:in `<main>'2.2.2 :003 >

更新 使用新的 shell 并连接到控制台似乎可以神奇地解决问题。虽然我仍然不知道最初损坏的东西是什么......

【问题讨论】:

  • 介意分享你的database.yml
  • 请分享database.yml 和错误的完整堆栈跟踪。
  • @nayiaw 和 kmrakibulislam 更新

标签: ruby-on-rails ruby ruby-on-rails-4 rails-console


【解决方案1】:

试试这个:

development:
    adapter: postgresql
    encoding: unicode
    database: XXX_development
    host: localhost
    pool: 5
    username: yourusername
    password: yourpassword

【讨论】:

  • 我的错,我确实有数据库:格式化为 X_development。但是显式添加用户名/密码字段并没有改变假设默认数据库名称范围和用户范围的问题。不过还是谢谢。
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 2017-06-21
  • 2021-12-20
相关资源
最近更新 更多