2

ruby プロジェクト (例: 003_foo3.rb) の新しい移行ファイルを作成しました

最初にローカルでテストする

$sequel -m ~/myproject/db/migration postgres://postgres@localhost/myproject_db
エラー: Sequel::DatabaseError: PG::Error: エラー: リレーション "bank" は既に存在します

その「銀行」テーブルは、最初の移行ファイル (001_foo1.rb) に既に含まれています。

続編トラックの移行は既に実行されていると思いますか? 私は何が欠けていますか?

4

1 に答える 1

1

Sequel から同様のエラー メッセージが時々表示されるので、あなたの痛みを感じます。

Sequel は、schema_infoアプリ データベースで呼び出されるテーブルを作成し、実行した移行を追跡します。

create_table(:schema_info) do
  column :version, "int(11)", :default=>0, :null=>false
end

タイムスタンプまたは整数バージョンのいずれかを使用します。

エラー メッセージは、Sequel がそのテーブルを作成していないか、アプリケーション データベースを最初から再作成したことが原因である可能性があります。この場合、スキーマ バージョンが失われ、エラー メッセージが作成されます。

あなたが提供した情報を考えると、何が起こったのかを正確に言うことはできません.

同様のエラーが時々発生するため、移行ファイル内のすべての移行コードをコメントアウトし、移行を実行してから、コードのコメントを再度外します。

特定の移行を既に実行していることが確実な場合はversion、テーブル内のフィールドの値を変更できschema_infoます。

次の移行があるとします。

001_some_migration.rb
002_some_other_migration.rb

...そして、すでに 001 を実行していて、「既に存在します」というエラーが表示された場合は、 を設定できますschema_infoversion= 1 にして、もう一度移行を実行します。移行 #1 は実行されませんが、#2 は直接実行されます。

于 2013-11-10T23:19:44.830 に答える