最近は小さいサービスを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に複数行があったので一旦両方削除して一行を追加することで解決。

なんで複数行になってしまったかについては不明のままで少し気持ち悪い。