18

「rakedb:migrate」を実行して、schema.dbをデータベーススキーマと再同期しました。しかし、私のテーブルの1つがすでに存在していると言って失敗しました。テーブルを作り直そうとしていたと思います。Railsとは関係なくデータベースに加えた変更を反映するようにschema.rbを更新したいだけの場合、「rake db:migrate」でない場合は、どのコマンドを使用する必要がありますか?そして、この種のことに関するドキュメントの最良の情報源は何ですか?

4

7 に答える 7

20

「rake db:migrate」は、プロジェクトのすべての未処理の移行を試みて実行します。スキーマをダンプするだけの場合は、「rake db:schema:dump」を実行します。
しかし、テーブルが既に存在するという問題があると思います。追加しようとしているテーブルがデータベースに既に存在するため、移行の 1 つが失敗しています。手で作成しましたか?移行を停止しましたが、それについての停止は書かれていませんか? 今後の移行を作成する前に、これを修正する必要があります。それが単なる間違いで、テーブルがそこにあり、正しいので、これを無視したい場合。私のお勧めは、失敗した移行の create table をコメントアウトして、ハックすることです。次に、「rake db:migrate」を実行します。その後、テーブルを作成します。これにより、スキーマのバージョンが更新されます。
すべての移行について適切なダウンを必ず書いてください。

于 2009-05-08T23:41:20.877 に答える
19

試す

RAILS_ENV=development rake db:drop

RAILS_ENV=development rake db:migrate

そして幸せになる!

データベース/テーブルが削除されるため、テスト環境または開発環境で実行するようにしてください。

于 2011-06-02T22:42:57.950 に答える
15

ときどき、少しおかしくなったときに、Rails が既に完了していると見なすべきマイグレーションを実行したいという状況に陥ることがあります (テーブルが既に存在するなど)。移行の番号 (ファイル名の先頭にある数字の部分) を見つけて、mysql に移動し、次のようなクエリを発行することで、移行を完了としてマークできます。

insert into schema_migrations values('20090521153438');

(または移行の数が何であれ)

または、Desert の migrate_plugin を使用して実行されているプラ​​グインの移行の場合:

insert into plugin_schema_migrations values('my_plugin', '005');
于 2010-08-04T23:31:47.653 に答える
6

rake db:migrate:resetすべてのテーブルを削除し、すべての移行を実行して新しいschema.rbファイルを作成します。

于 2013-02-19T11:46:37.837 に答える
2

rake db:schema:dumpまたはを試してくださいrake db:migrate:redo

于 2009-05-08T23:07:25.653 に答える
2

を使用しrake db:schema:dumpます。

$ rake -T | grep schema
rake db:schema:dump # Create a db/schema.rb file that is portable
                    #  against any database supported by ActiveRecord

rake db:schema:dumpdb/schema.rb移行を再度実行したり、テーブルを削除したり (テーブル内のデータが失われることを意味します) せずにファイルを再作成するため、最初に試すことができる侵襲性が最も低い方法です。

于 2015-03-23T09:33:29.370 に答える
1

ドキュメントに関する最後の質問に答える:

于 2009-05-08T23:50:22.603 に答える