More Than 1 Row in Migrator Tableへの対処法
最近は小さいサービスをSinatra + Sequel + Dockerの構成でやっている。
今回はError: Sequel::Migrator::Error: More than 1 row in migrator table
というエラーが出てきてよくわからなかったのでその対処法を残しておく。
てっきりmigrationの書き方に不備があって同じカラムを複数回追加してしまってるとかのエラーだと思ったけど違った。
migrationのバージョン管理
migrationをどこまで行ったかの管理方法はRailsで一般的なファイル名の先頭に日付や時刻が入るものと、001_init.rb
などの簡易的のものがある。規模が小さい開発であれば後者の連番方式で十分のためにこれを使っている。
なお複雑な方はDBにschema_migrations
という名前で、簡易な方はschema_info
という名前のテーブルが作られる。
schema_migrations
は過去の履歴を全て持つがschema_info
はテーブルに行を一つしか持たず、直近に適用された番号だけを保持してる。
解決策
それでやっと最初のエラーError: Sequel::Migrator::Error: More than 1 row in migrator table
の意味がわかった。
確認してみたら本来は一行しか持たないはずのschema_info
に複数行があったので一旦両方削除して一行を追加することで解決。
なんで複数行になってしまったかについては不明のままで少し気持ち悪い。