ActiveRecord::ConnectionNotEstablished 从 Rails 5.2 迁移到 Rails 6.0 后随机出现在已部署的实例中

ActiveRecord::ConnectionNotEstablished randomly occured in deployed instance after migrate from Rails 5.2 to Rails 6.0

从 Rails 5.2 升级到 6.0 后 我在 AWS 中的已部署实例中进行探索性测试时随机遇到此错误,但并不常见。

当它发生时,它持续了一段时间

ActiveRecord::ConnectionNotEstablished 找不到 'primary' 的连接池。

从未在本地中找到具有相同配置的。 (都连接到同一个数据库)

任何建议或解决方案都会有所帮助。 谢谢。

发生此错误时急剧下降 连接计数

错误和 RDS 连接计数

发生错误时从服务器记录

2021-03-25 10:58:14 +0700 Using rack adapter
TRG Started 2021-03-25 10:58:19 +0700
2021-03-25 10:58:20 +0700 Thin web server (v1.8.0 codename Possessed Pickle)
2021-03-25 10:58:20 +0700 Maximum connections set to 1024
2021-03-25 10:58:20 +0700 Listening on 0.0.0.0:8080, CTRL+C to stop
...

2021-03-25 11:13:36 +0700 Unexpected error while processing request: No connection pool with 'primary' found.
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:1146:in `retrieve_connection'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_handling.rb:221:in `retrieve_connection'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_handling.rb:189:in `connection'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/relation/calculations.rb:193:in `block in pluck'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/relation.rb:839:in `skip_query_cache_if_necessary'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/relation/calculations.rb:193:in `pluck'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/schema_migration.rb:52:in `all_versions'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1084:in `get_all_versions'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1091:in `current_version'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1191:in `current_version'
    /data/acm-trg/lib/rack/health_check.rb:35:in `rail_migration_version'
    /data/acm-trg/lib/rack/health_check.rb:15:in `call'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `each'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `call'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/thin-1.8.0/lib/thin/connection.rb:86:in `block in pre_process'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/thin-1.8.0/lib/thin/connection.rb:84:in `catch'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/thin-1.8.0/lib/thin/connection.rb:84:in `pre_process'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/thin-1.8.0/lib/thin/connection.rb:50:in `block in process'
    /home/centos/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/eventmachine-1.2.7/lib/eventmachine.rb:1077:in `block in spawn_threadpool'

已更新

确保您的应用程序未手动调用 ActiveRecord::Base.establish_connection,例如,在运行状况检查路由中。不需要调用 establish_connection,因为 ActiveRecord 会在 Rails.

中自动建立自己的连接

当您自己调用此方法时,它会破坏旧的数据库连接池并重新创建另一个。