"undefined method `[]' for nil:NilClass" 同时超级

"undefined method `[]' for nil:NilClass" while super

我用一些自定义脚本管理 Redmine(2.3.2.stable.231,rails 3.2.13),它曾经工作得很好。然而最近,当我的脚本试图解决 Redmine API 的一个问题时,它得到(只是有时,不是每次)HTTP 500,因为:

NoMethodError (undefined method `[]' for nil:NilClass):
 app/models/issue.rb:159:in `create_or_update'
 app/models/issue.rb:1347:in `recalculate_attributes_for'
 app/models/issue.rb:1311:in `update_parent_attributes'
 app/models/issue.rb:173:in `destroy'
 app/controllers/issues_controller.rb:313:in `block in destroy'
 app/controllers/issues_controller.rb:311:in `each'
 app/controllers/issues_controller.rb:311:in `destroy'

这很令人惊讶,因为issue.rb(问题class当然继承自ActiveRecord::Base)是

158   def create_or_update
159     super
160   ensure
161     @status_was = nil
162   end
163   private :create_or_update

我在第 159 行看不到任何 [] 运算符的使用,也没有看到另一个函数调用 traceback,所以这怎么可能呢?我是否遗漏了有关 ruby 的任何信息?我如何进一步追踪它?

我偶然找到了答案 - NoMethodError 的原因是名为 redmine_backlogs 的插件。它创建 rb_issue_history table,其中包含一些问题的序列化历史数据(如果需要),当然 history 列的容量有限。我们需要保留一些重要的长期问题,因此 history 字段已达到极限。从数据库加载对象期间导致错误。

但是我仍然怀疑回溯中缺少某些东西。错误本身发生在 rb_issue_history.rb 模型中的 init_history 方法中 - 正如我所说,我在其他日志文件中偶然发现了这一点。