2022-02-01 Rails db:prepare タスクのやっていること
Rails db:prepare タスクのやっていること
Rails 6 では、
db:prepare
という rake タスクが追加されました。データベースが存在しないときは、データベースを作成してから、 schema.rb からテーブルを作成(ロード)し db:seed を実行します ( db:setup と同じ動作 )。 データベースが存在するときは、 db:migrate を実行します。
Rails6 のちょい足しな新機能を試す95(db:prepare 編) - Qiita
ソースコードを見てみる
ソースを追ってみる(Rails 7)。
desc "Runs setup if database does not exist, or runs migrations if it does"
task prepare: :load_config do
ActiveRecord::Tasks::DatabaseTasks.prepare_all
end
def prepare_all
seed = false
configs_for(env_name: env).each do |db_config|
ActiveRecord::Base.establish_connection(db_config)
# Skipped when no database
migrate
if ActiveRecord.dump_schema_after_migration
dump_schema(db_config, ActiveRecord.schema_format)
end
rescue ActiveRecord::NoDatabaseError
create_current(db_config.env_name, db_config.name)
if File.exist?(schema_dump_path(db_config))
load_schema(db_config, ActiveRecord.schema_format, nil )
else
migrate
end
seed = true
end
ActiveRecord::Base.establish_connection
load_seed if seed
end