Я использую необработанные обновления для SQL-запросов (по соображениям производительности) в контексте задачи рейка. Что-то вроде следующего:Регистрация необработанных SQL-ошибок в Rake Tasks
update_sql = Book.connection.execute("UPDATE books AS b SET
stock = vs.stock,
promotion = vs.promotion,
sales = vs.sales
FROM (values #{values_string}) AS vs
(stock, promotion, sales) WHERE b.id = vs.id;")
Хотя все «прозрачно» в местном развитии, если SQL терпит неудачу в производстве во время выполнения задачи рельсов (например, так как столбец поощрения равна нулю и утверждение становится недействительным) , ошибка не регистрируется.
Я могу вручную зарегистрировать это с улавливанием исключения, как показано ниже, однако какой-то вариант, который позволил бы автоматически регистрировать, был бы лучше.
begin
...
rescue ActiveRecord::StatementInvalid => e
Rails.logger.fatal "Books update: ActiveRecord::StatementInvalid: "+ e.to_s
end