2015-02-09 2 views
1

Я управляю Redmine (2.3.2.stable.231, rails 3.2.13) с помощью некоторых пользовательских скриптов, и он работал очень хорошо. Однако в последнее время, когда мой сценарий пытается уничтожить проблему с помощью Redmine API, он получает (только иногда, не каждый раз) HTTP 500 из-за:"undefined method` [] 'for nil: NilClass "while super

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, ни другой вызов функции на TRACEBACK, так как это возможно? Я что-то пропустил в супер-рубине? Как отслеживать его дальше?

+0

'super' вызовет метод' create_or_update' в родительском классе 'Issue' (? - Я думаю, что это класс' Issue'.) – mudasobwa

+0

Будет ли это? В этом нет ничего о трагедии. В любом случае, я проверил его, и ActiveRecord :: Base, похоже, не использует оператор [] либо [link] (http://apidock.com/rails/ActiveRecord/Base/create_or_update) – fernando

+0

Состояние гонок? Я бы предположил, что сам экземпляр отсутствует, когда он достигает строки ** super **. Много ли это происходит? – froderik

ответ

1

Я узнал ответ случайно - причиной NoMethodError был плагин, называемый redmine_backlogs. Он создает таблицу rb_issue_history с некоторыми сериализованными историческими данными по вопросам (если необходимо) и, конечно, history столбец имеет ограниченную емкость. Нам нужно было сохранить некоторые важные долгосрочные проблемы, и для них history поле стало доведено до предела. Это вызвало ошибки при загрузке объекта из БД.

Однако я все еще подозреваю, что что-то не хватает на трассе. Сама ошибка возникает в методе init_history в модели rb_issue_history.rb - как я уже сказал, я случайно обнаружил это в других файлах журнала.

Смежные вопросы