我使用一些自定义脚本管理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(问题类当然继承自ActiveRecord :: Base)是
158 def create_or_update
159 super
160 ensure
161 @status_was = nil
162 end
163 private :create_or_update
我无法在第159行看到任何[]运算符用法,也没有其他函数调用回溯,那么这怎么可能呢?我错过了关于ruby超级的一切吗?我如何进一步追踪它?
答案 0 :(得分:1)
我偶然发现了答案 - NoMethodError
的原因是插件名为redmine_backlogs。它会创建rb_issue_history
表,其中包含一些问题的序列化历史数据(如果需要),当然history
列的容量有限。我们需要保留一些重要的长期问题,并且对于他们history
字段被推到了极限。这在从DB加载对象期间导致错误。
但是我仍然怀疑追溯上缺少某些东西。错误本身发生在init_history
模型中的rb_issue_history.rb
方法中 - 正如我所说,我在其他日志文件中偶然发现了这一点。