rakeタスクのコンテキストで、パフォーマンス上の理由から、raw SQLの一括更新を使用しています。以下のような何か:Rakeタスクで未処理のSQLエラーを記録する
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は、レールのタスクの実行中に生産に失敗した場合すべてが、地域開発における「透明」である間(例えばプロモーション列がnilであると、文が無効になるため)エラーは記録されません。
これを手動でログに記録することもできますが、以下のように例外をキャッチすることもできますが、自動ログ記録を許可するオプションがあると便利です。
begin
...
rescue ActiveRecord::StatementInvalid => e
Rails.logger.fatal "Books update: ActiveRecord::StatementInvalid: "+ e.to_s
end