3

最後の移行をロールバックしようとしました:

rake db:rollback

次のように表示されます:

==  AddUserIdToPictures: reverting ============================================
-- remove_index(:pictures, {:column=>[:user_id, :visible]})
-> 0.1201s
-- remove_column(:pictures, :user_id, :integer)
-> 0.0127s
==  AddUserIdToPictures: reverted (0.1567s) ===================================

次に、いくつかのページにアクセスしようとすると、エラーが発生します:

Migrations are pending; run 'rake db:migrate RAILS_ENV=development' to resolve this issue

しかし、エラーの内容を実行すると: rake db:migrate RAILS_ENV=development 、上記のロールバックを再作成します:

==  AddUserIdToPictures: migrating ============================================
-- add_column(:pictures, :user_id, :integer)
-> 0.0300s
-- add_index(:pictures, [:user_id, :visible])
-> 0.1007s
==  AddUserIdToPictures: migrated (0.1310s) ===================================

ここで何が悪いのですか?コマンドを実行する前に移行ファイルを削除する必要がありますか?

4

4 に答える 4

1

Rails は、最新のスキーマ移行 ID 文字列を含む「バージョン」という名前の単一の列で構成される schema_migrations テーブルを作成することに注意してください。ID 文字列は、db/schema.rb の ID 文字列に対応します。

ActiveRecord::Schema.define(version: 20140284052547) do

  # Your model definitions

end

SchemaMigration#version のバージョン文字列が db/schema.rb のバージョンと一致しない場合、「移行が保留中です」という例外が発生します。これは、新しいシステムをセットアップしたり、OS をクリーン インストールしたりして、'rake db:migrate' を実行しながらバックアップ ファイルからデータベースを復元すると、バージョン文字列が同期しなくなることがあります。問題を修正する方法は、db/schema.rb に含まれる値を使用して、schema_migrations テーブルに新しい行を挿入することですが、これは、実際のデータベースが schema.rb のスキーマ定義と一致することが確実な場合にのみ行ってください。

insert into schema_migrations (version) values ('20140284052547');
于 2014-06-19T18:51:30.893 に答える
0

代わりに、このコマンドを試してロールバックしてください

rake db:rollback

移行ファイルを変更する場合に使用します。

rake db:migrate:redo STEP=1

テーブルを削除したい場合に使用します

rake db:migrate:down VERSION=your_migration_version
于 2013-12-01T10:24:30.100 に答える
0

rake db:rollback STEP=2 によって、2 つの最後の移行をロールバックしてみてください。

于 2013-10-31T19:04:02.233 に答える