首页 > 解决方案 > 从 Rails 4 升级到 6:未初始化的常量 ActiveRecord::ConnectionAdapters::SchemaCache

问题描述

我将一个相当旧的应用程序从 rails 4.2 升级到了 6.1.3.1。该应用程序在本地运行良好,但是当我尝试使用 capistrano 将其部署到我的服务器时,出现以下错误。它指出

NameError: uninitialized constant ActiveRecord::ConnectionAdapters::SchemaCache 
     ** Did you mean?  ActiveRecord::Schema

在运行 bundle exec rake assets:precompile 时会发生这种情况,无论是通过 capistrano 还是在服务器上手动进行。我尝试在 application.rb 中设置一些标志,例如:

config.assets.initialize_on_precompile = false

但是,这并没有解决问题。我觉得我已经用尽了我的知识和搜索技能。有人可以帮我指出正确的方向吗?

  * executing "cd -- /home/user/app_rails6/releases/20210419123208 && RAILS_ENV=staging RAILS_GROUPS=assets bundle exec rake assets:precompile"
  * executing command
 ** rake aborted! 
 ** NameError: uninitialized constant ActiveRecord::ConnectionAdapters::SchemaCache 
 ** Did you mean?  ActiveRecord::Schema
 **  
 ** /home/user/app_rails6/shared/bundle/ruby/2.6.0/gems/activerecord-6.1.3.1/lib/active_record/railtie.rb:139:in `block (3 levels) in <class:Railtie>'
 **  
 ** /home/user/app_rails6/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.3.1/lib/active_support/lazy_load_hooks.rb:71:in `class_eval'
 **  
 ** /home/user/app_rails6/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.3.1/lib/active_support/lazy_load_hooks.rb:71:in `block in execute_hook'
 ** /home/user/app_rails6/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.3.1/lib/active_support/lazy_load_hooks.rb:61:in `with_execution_control'
------trace truncated by author------

更新:

更新:当我使用使用 sqlite 作为数据库的环境时,命令运行良好。当我使用使用 postgres 作为数据库的环境时,我得到了错误。

标签: ruby-on-railsruby-on-rails-6

解决方案


原来在 Rails 中有一个错误,现在已在 6.1.3.1(6-1-stable 分支)上修复。

我仍然遇到稍微不同的错误,但这个问题已经解决。


推荐阅读