Что вызывает предупреждение об устаревании: ActiveRecord:: Base.raise_in_transactional_callbacks =?

Я получаю это сообщение, когда запускаю спецификации своих функций:

ПРЕДУПРЕЖДЕНИЕ О ДЕПРЕКАЦИИ: ActiveRecord:: Base.raise_in_transactional_callbacks = устарела, не имеет эффекта и будет удалена без замены.

Я использую Rails 5.0.0.rc1, и я не уверен, что бросает это предупреждение об отказе.

У меня было это в моем файле application.rb. Я удалил его, и предупреждение об устаревании ушло:

config.active_record.raise_in_transactional_callbacks = true

Мне бы хотелось узнать, что на самом деле означает это предупреждение об устаревании, и знать, что вызывает это предупреждение об отказе.

Ответы

Ответ 1

Я считаю, что это поведение было добавлено между 4.1 и 4.2 как временное решение проблемы, которая больше не имеет отношения к рельсам 5:

http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#error-handling-in-transaction-callbacks

В настоящее время активная запись подавляет ошибки, возникающие внутри after_rollback или after_commit обратные вызовы и только печатает их в журналы. В следующей версии эти ошибки больше не будут подавляться. Вместо этого ошибки будут распространяться нормально, как и в других активных Записывать обратные вызовы.

Когда вы определяете обратный вызов after_rollback или after_commit, вы будете получать предупреждение об этом предстоящем изменении. Когда вы готово, вы можете выбрать новое поведение и удалить устаревание, добавив следующую конфигурацию в свою конфиг /application.rb:

config.active_record.raise_in_transactional_callbacks = true