「rakedb:migrate」を実行して、schema.dbをデータベーススキーマと再同期しました。しかし、私のテーブルの1つがすでに存在していると言って失敗しました。テーブルを作り直そうとしていたと思います。 Railsとは関係なくデータベースに加えた変更を反映するようにschema.rbを更新したいだけの場合、「rakedb:migrate」でない場合はどのコマンドを使用する必要がありますか?そして、この種のことに関するドキュメントの最良の情報源は何ですか?
「rakedb:migrate」は、プロジェクトのすべての未解決の移行を試行して実行します。スキーマをダンプしたいだけの場合は、「rakedb:schema:dump」を実行してください。
しかし、テーブルがすでに存在すると表示されるという問題があると思います。追加しようとしているテーブルがデータベースにすでに存在するため、移行の1つが失敗しています。手作業で作成しましたか?移行をダウンしましたが、ダウンを記述していませんか?将来の移行を作成する前に、これを修正する必要があります。それが単なる間違いであり、テーブルがそこにあり、正しいので、これを無視したい場合。失敗した移行でcreateテーブルをコメントアウトして、ハックすることをお勧めします。次に、「rakedb:migrate」を実行します。次に、テーブルを作成します。これにより、スキーマのバージョンが更新されます。
すべての移行で適切なダウンを書き込むようにしてください。
試してみてください
Rails_ENV=development rake db:drop
前
Rails_ENV=development rake db:migrate
そして幸せになる!
データベース/テーブルが削除されるため、テスト環境または開発環境で実行するようにしてください
ときどき、状況が少し変わったときに、Railsが、すでに実行されていると考えるべき移行を実行したいという状況に陥ることがあります(テーブルはすでに存在しますなど)。移行の番号(ファイル名の先頭にある番号の部分)を見つけ、mysqlに移動して、次のようなクエリを発行することで、移行を完了としてマークできます。
insert into schema_migrations values('20090521153438');
(または移行の数が何であれ)
または、Desertのmigrate_pluginを使用して実行されているプラグイン移行の場合:
insert into plugin_schema_migrations values('my_plugin', '005');
rake db:migrate:reset
はすべてのテーブルを削除し、すべての移行を実行して、新しいschema.rb
ファイルを作成します。
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:dump
は、移行を再度実行したり、テーブルを削除したりせずにdb/schema.rb
ファイルを再作成するため(これらのテーブルのデータが失われることを意味します)、最初に試すことができる最も侵襲性の低い方法です。
rake db:schema:dump
またはrake db:migrate:redo
を試してください。
ドキュメントに関する最後の質問に答える: