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'
已更新
- 从 aurora 升级 mysql 5.6 到 5.7 不修复 这个问题
确保您的应用程序未手动调用 ActiveRecord::Base.establish_connection
,例如,在运行状况检查路由中。不需要调用 establish_connection
,因为 ActiveRecord 会在 Rails.
中自动建立自己的连接
当您自己调用此方法时,它会破坏旧的数据库连接池并重新创建另一个。
从 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'
已更新
- 从 aurora 升级 mysql 5.6 到 5.7 不修复 这个问题
确保您的应用程序未手动调用 ActiveRecord::Base.establish_connection
,例如,在运行状况检查路由中。不需要调用 establish_connection
,因为 ActiveRecord 会在 Rails.
当您自己调用此方法时,它会破坏旧的数据库连接池并重新创建另一个。