##事象
rakeで数千件分のレコードを更新する処理を走らせたら以下のエラーが発生した。
rake aborted!
ActiveRecord::TransactionIsolationConflict: Transaction isolation conflict detected: Lock wait timeout exceeded; try restarting transaction
##原因
MySQLでトランザクションがコミットされる前にプログラム何らかの原因で終了してしまい、ロックを握ったまま放置されたことが原因みたいです。
おそらくですがrails cのsandboxモードを終了しないままrakeタスクを走らせたからではないかと思います。
##解決方法
1:mysqlにターミナルからログインmysql -u root -p
2:SHOW ENGINE INNODB STATUS
で一覧が表示されるので"TRANSACTIONS"の項目を見る
MySQL thread id 35, OS thread handle 0x13291e000, query id 107117 localhost 127.0.0.1 root cleaning up
---TRANSACTION 421810, ACTIVE 16448 sec
3:16448秒もcommitされないままのトランザクションを発見!このプロセスid 35をkill 35
で消す
4:再度rakeタスクを実行すると成功した
##参考
トランザクションを強制的に終了させる