私はdev Ruby on Railsデータベースにデータがいっぱいあります。すべてを削除してデータベースを再構築したいです。私はのようなものを使うことを考えています:
rake db:recreate
これは可能ですか?
これを行うには2つの方法があります。
これによりデータベースがリセットされ、現在のスキーマにallがリロードされます。
rake db:reset db:migrate
これはあなたのdbを破壊し、そしてそれを作成し、そしてあなたの現在のスキーマを移行します:
rake db:drop db:create db:migrate
両方のシナリオですべてのデータが失われます。
Rails 4では、必要なのは
$ rake db:schema:load
これにより、すべての移行を1つずつ適用しなくても、DBの内容全体が削除され、schema.rbファイルからスキーマが再作成されます。
ターミナルでは以下のライナーを使用しています。
$ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare
これをシェルのエイリアスとし、remigrate
と名付けました。
ここまでで、Railsタスクを簡単に「連鎖」させることができます。
$ rake db:drop db:create db:migrate db:schema:dump db:test:prepare # db:test:prepare no longer available since Rails 4.1.0.rc1+
更新:Rails 5では、このコマンドはこのコマンドを通してアクセス可能になります。
Rails db:purge db:create db:migrate Rails_ENV=test
最新のRails 4.2リリース以降では、実行できるようになりました。
rake db:purge
出典: コミット
# desc "Empty the database from DATABASE_URL or config/database.yml for the current Rails_ENV (use db:drop:all to drop all databases in the config). Without Rails_ENV it defaults to purging the development and test databases."
task :purge => [:load_config] do
ActiveRecord::Tasks::DatabaseTasks.purge_current
end
上記のように一緒に使用できます。
rake db:purge db:create db:migrate Rails_ENV=test
あなたが欲しいものに応じて、あなたは使うことができます…
rake db:create
…config/database.yml
から最初からデータベースを構築する、あるいは…
rake db:schema:load
…あなたのschema.rb
ファイルから一からデータベースを構築するため。
一連の手順を実行するだけです。データベースを削除してから再作成し、データを移行します。シードがある場合は、データベースを播種します。
rake db:drop db:create db:migrate db:seed
rake
のデフォルト環境は development であるため、スペックテストで例外が発生した場合は、 test 環境用にdbを再作成する必要があります。
Rails_ENV=test rake db:drop db:create db:migrate
ほとんどの場合、テストデータベースはテスト手順中に蒔かれているので、db:seed
タスクアクションを渡す必要はありません。それ以外の場合は、データベースを準備する必要があります。
rake db:test:prepare
または
Rails_ENV=test rake db:seed
さらに、 recreate タスクを使用するには、 Rakefile に次のコードを追加します。
namespace :db do
task :recreate => [ :drop, :create, :migrate ] do
if ENV[ 'Rails_ENV' ] !~ /test|cucumber/
Rake::Task[ 'db:seed' ].invoke
end
end
end
その後発行します。
rake db:recreate
好きに使う
rake db:drop db:create db:migrate db:seed
一行ですべて。環境が何度も何度も再ロードされないので、これはより速いです。
db:drop - データベースを削除します。
db:create - データベースを作成します (ホスト/ db /パスワードはconfig/database.ymlから取得されます)
db:migrate - ディレクトリ から既存のマイグレーションを実行します(db/migration/ 。rb)*。
db:seed - ディレクトリから可能なシードデータを実行します (db/migration/seed.rb) ..
私は通常好む:
rake db:reset
一気にやります。
乾杯!
コマンドラインから
rake db:migrate:reset
手動で行うことができます。
rake db:drop
rake db:create
rake db:migrate
あるいはrake db:reset
だけで、上記のステップを実行しますが、あなたのdb/seeds.rb
ファイルも実行します。
追加の微妙な点は、すべてのマイグレーションファイルを再度実行するのではなく、rake db:reset
がschema.rb
ファイルから直接ロードされることです。
あなたのデータはどのような場合でも吹き飛ばされます。
次のコマンドラインを使うことができます。
rake db:drop db:create db:migrate db:seed db:test:clone
特定のデータベースを削除するには、Railsコンソールでこれを実行できます。
$Rails console
Loading development environment
1.9.3 > ActiveRecord::Migration.drop_table(:<table_name>)
1.9.3 > exit
そして、再びDBを移行する
$bundle exec rake db:migrate
Rails 4.2では、すべてのデータを削除してデータベースを保持する
$ bin/rake db:purge && bin/rake db:schema:load
https://github.com/Rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
Db:dropとdb:setupを実行するにはdb:reset
- db:drop、db:createとdb:migrateを実行するdb:migrate:reset
を使用できます。
依存している既存のschema.rbを使いたい
Railsガイド によると、マイグレーションファイルを1つずつ再ロードするのではなくschema.rb
からロードするため、このoneライナーを使用する必要があります。
rake db:reset
開発中は、常にデータベースを再作成したいので、lib/tasksフォルダーにレーキタスクを定義できます。
namespace :db do
task :all => [:environment, :drop, :create, :migrate] do
end
end
そしてターミナルであなたは走るでしょう
rake db:all
データベースを再構築します
走らせるだけ
rake db:setup
データを含むシードファイルを作成した場合は、データベースを削除し、新しいデータベースを作成し、dbをシードから追加します。
3つのオプション、同じ結果:
1。すべてのステップ:
$ rake db:drop # deletes the database for the current env
$ rake db:create # creates the database for the current env
$ rake db:schema:load # loads the schema already generated from schema.rb / erases data
$ rake db:seed # seed with initial data
2。リセット:
$ rake db:reset # drop / schema:load / seed
。 Migrate:reset:
$ rake db:migrate:reset # drop / create / migrate
$ rake db:seed
注:
私はこのコマンドを実行するための最良の方法だと思います:
**rake db:reset** it does db:drop, db:setup
rake db:setup does db:create, db:schema:load, db:seed
私は今日、私のRailsスキーマにかなりの数の変更を加えました。私は、階層内に2つのモデルを追加する必要があり、他のいくつかは削除する必要があることに気付きました。モデルとコントローラーには、多くの小さな変更が必要でした。
2つの新しいモデルを追加し、それらを使用して作成しました。
rake db:migrate
それから私はschema.rbファイルを編集しました。不要になった古いモデルを手動で削除し、必要に応じて外部キーフィールドを変更し、わかりやすくするために少し並べ替えました。 I 削除された すべての移行を行ってから、次のようにしてビルドを再実行しました。
rake db:reset
それは完璧に機能しました。もちろん、すべてのデータをリロードする必要があります。 Railsは、移行が削除され、最高水準点を再設定したことに気付きました。
-- assume_migrated_upto_version(20121026094813, ["/Users/sean/Rails/f4/db/migrate"])