我正在尝试将Rails 6.1.3.1应用程序从Ruby 2.6.6升级到3.0.0
所有的rspec测试都运行良好,开发中的一切似乎都很好,除了一件事:即使是最简单的任务也会出现以下错误:"ActionView::Base的类变量@@debug_missing_translation被Object覆盖">
例如,这个simpletask.rake文件
task simpletask: :environment do
puts 'Hello'
end
无法运行,因为我得到以下错误:
lxxx@xxx:~/Workspace/edumino$ rails simpletask
rails aborted!
class variable @@debug_missing_translation of ActionView::Base is overtaken by Object
/home/xxx/railsapp/config/environment.rb:5:in `<top (required)>'
/home/xxx/railsapp/bin/rails:5:in `require'
/home/xxx/railsapp/bin/rails:5:in `<top (required)>'
/home/xxx/railsapp/bin/spring:10:in `require'
/home/xxx/railsapp/bin/spring:10:in `block in <top (required)>'
/home/xxx/railsapp/bin/spring:7:in `<top (required)>'
Tasks: TOP => simpletask => environment
(See full trace by running task with --trace)
。。。所以,事实证明,这个问题是一个已经存在的任务。我不记得为什么这是必要的,但任务是这样的:
# frozen_string_literal: true
require "#{Rails.root}/app/helpers/cron_helper"
require "#{Rails.root}/app/helpers/notifier_helper"
require "#{Rails.root}/app/helpers/application_helper"
include ApplicationHelper
include ActionView::Helpers::TranslationHelper
include CronHelper
namespace :cron do
task sms: :environment do |_t, _args|
...
end
end
我认为有罪代码包括ActionView::Helpers::TranslationHelper
再说一遍,我不记得当时我为什么要这么做了。但是,如果你在升级到Ruby 3.0时遇到这种"被超越"的错误,请检查你的其他任务,看看你可能有什么奇怪的包含。就我而言,由于我不需要旧任务,我只是删除了它。