いくつかの展開の問題のため、gitでschema.rbの追跡を停止しました。どういうわけか、これを詰め込み、schema.rbファイルが消えていく途中のどこかで。
データベースまたは移行からschema.rbを再生成する方法はありますか?既存のデータを失いたくない。
rake -T
を実行すると、Railsプロジェクトで考えられるすべてのrakeタスクがリストされます。それらの1つはdb:schema:dumpで、データベースからRailsアプリのschema.rbを再作成します。
bundle exec rake db:schema:dump
慎重に、
rake db:schema:dump
現在のDBスキーマをダンプしますFROM the DB。これは、移行に変更を加えた場合、[〜#〜] not [〜#〜]がschema.rbファイルに反映されることを意味します。
移行からスキーマを再作成する場合は、次の手順を実行します。
rake db:drop # ERASES THE DATABASE !!!!
rake db:create
rake db:migrate
rake db:schema:dump
これはRails 3でまだ有効だと思います-データベースからschema.rbを再生成します。
Rails 5 Way:
Rails db:schema:dump
またはGem :: LoadError thenに遭遇した場合:
bundle exec Rails db:schema:dump
注:
in Rails 5では、Rails
の代わりにrake
を使用してタスクを生成/実行することをお勧めします。これは覚えておいてください、Rails生成されたタスクの拡張子は.rake
lib/tasks/myTask.rake
を参照してください。つまり、これらのタスクはrake
を前に付けて実行することもできます。
schema.rb
をローカルで再生成する場合は、大丈夫です。データベーステーブルの構造の表現を保持するだけです。データ自体はこのファイルには含まれていません。
schema.rb
ファイルを再生成するには、次を実行します:
bundle exec rake db:schema:dump
次に、新しいschema.rb
ファイルをコミットするだけで、正常な状態になります。
Schema.rbファイル自体から直接:
別のシステムでアプリケーションデータベースを作成する必要がある場合は、すべての移行を最初から実行するのではなく、
db:schema:load
を使用する必要があります。後者は、欠陥があり、持続不可能なアプローチです(移行が増えると、実行が遅くなり、問題が発生する可能性が高くなります)。
したがって、rake db:migrate
の提案は行わないでください。これは、この記事の執筆時点で、最低評価の回答で提案されていました。
また、移行を削除しても古いスキーマが更新されないという同様の問題がありました。
そのため、データベース内のすべての既存のテーブルを削除し、それらを再度移行しました。次に、「db:schema:load」コマンドを実行すると、新鮮なschema.rbが得られました。
drop table my_table_name // deleted them indivisully
rake db:migrate
rake db:schema:dump // re-created a new schema