"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
方法中 - 正如我所说,我在其他日志文件中偶然发现了这一点。
我用一些自定义脚本管理 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
方法中 - 正如我所说,我在其他日志文件中偶然发现了这一点。