为什么我的 rails 应用会引发 "database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)" 错误?

Why does my rails app raise a "database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)" error?

我刚刚在 ruby 2.2 的新 gem 集中使用 Capistrano 更新了我的生产 rails 应用程序,我收到以下错误:

/var/www/odpf/shared/bundle/ruby/2.2.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_specification.rb:47:in `resolve_hash_connection': database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)

这是我的 database.yml :

production:
  host: localhost
  port: xxxx
  adapter: postgresql
  encoding: utf8
  database: odpf
  pool: 5
  username: xxxxxx
  password: xxxxxx

我不明白为什么我会收到这个错误,因为我的 database.yml 在 capisrano 更新前后都没有改变。

所有gem都存入/var/www/odpf/shared/bundle/ruby/2.2.0/gems.

如果我 运行 a bundle exec gem list

存在 postgresql 的 pg gem

我的数据库正在运行,因为我可以使用 database.yml 的用户从 psql 连接到它:\c odpf xxxxxx 127.0.0.1 xxxx

所以我不明白出了什么问题。

这也是我 运行 a bundle exec rails c :

时更大跟踪错误的摘录
/var/www/odpf/current$ bundle exec rails c
/var/www/odpf/shared/bundle/ruby/2.2.0/gems/activesupport-3.2.21/lib/active_support/values/time_zone.rb:270: warning: circular argument reference - now
/var/www/odpf/shared/bundle/ruby/2.2.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_specification.rb:47:in `resolve_hash_connection': database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)
    from /var/www/odpf/shared/bundle/ruby/2.2.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_specification.rb:41:in `resolve_string_connection'

它在谈论 ActiveSupport 中的循环引用,也许它有助于解决这个问题?

===更新===

我只是将测试和开发部分添加到我的 database.yml 中,错误消息确实发生了变化。看来 rails 相信他处于测试模式:

bundle exec rails c

/var/www/odpf/shared/bundle/ruby/2.2.0/gems/activesupport-3.2.21/lib/active_support/values/time_zone.rb:270: warning: circular argument reference - now
/var/www/odpf/shared/bundle/ruby/2.2.0/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in `require': cannot load such file -- test/unit/testcase (LoadError)

我不明白为什么会这样?因为我的虚拟主机中有一个 RailsEnv production 行,并且在 capistrano 更新之前它工作正常。

事实上一切都是正确的。

关于rails控制台,它总是在开发模式下执行,除非你特别要求生产参数。

关于我的问题,我不得不停止 postgresql,停止 apache2,并修改我的 .gitignore 文件以再次跟踪 tmp/restart.txt 文件并使其再次成为我的存储库的一部分(通过复制它,删除旧的,git add -A, git push ...).

然后重新启动postgresql和apache2。

抱歉这个问题。