スキーマまたは新しい移行ファイルに変更を加えるたびに、次のコマンドを実行します。
rake db:drop db:create db:migrate db:seed
これを行うための事前に構築された同等の方法はありますか?
私が読んだことから、それrake db:reset
はまったく同じことをしないと思いましたが、私は間違っている可能性があります。
スキーマまたは新しい移行ファイルに変更を加えるたびに、次のコマンドを実行します。
rake db:drop db:create db:migrate db:seed
これを行うための事前に構築された同等の方法はありますか?
私が読んだことから、それrake db:reset
はまったく同じことをしないと思いましたが、私は間違っている可能性があります。
このためのカスタムrakeタスクを作成できます--lib/tasks / db_rebuild_all.rake
namespace :db_tasks do
desc "Rebuild database"
task :rebuild, [] => :environment do
raise "Not allowed to run on production" if Rails.env.production?
Rake::Task['db:drop'].execute
Rake::Task['db:create'].execute
Rake::Task['db:migrate'].execute
Rake::Task['db:seed'].execute
end
end
次に実行するだけbundle exec rake db_tasks:rebuild
- 実行
rake db:reset && rake db:seed
(注:db / schema.rbファイルを更新する必要があります)
または- 走る
rake db:migrate:reset && rake db:seed
rake db:drop
実行してから実行できますrake db:setup
。
db:setup
実行されますrake db:create db:schema:load and db:seed
しかし、新しい移行を行うたびにデータベースを削除して再作成するのはなぜですか?これが、既存のデータベースに段階的な変更を加えるための移行の目的です。
まず、次のコマンドを使用してタスクファイル(lib / tasks / db.rake)を作成します。
rails g task db reseed
次に、それに書き込みます:
namespace :db do
desc "Reseed database task"
task reseed: [ 'db:drop', 'db:create', 'db:migrate', 'db:seed' ] do
puts 'Reseeding completed.'
end
end
Rails 6の時点でrake db:prepare
、dbを作成し、移行とシードを実行する実行が可能です。
データベースを完全にリセットする場合は、rake db:drop && rake db:prepare
https://guides.rubyonrails.org/v6.0/6_0_release_notes.html#active-record-notable-changes