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

https://github.com/rails/rails/blob/e483bc5965d91976a7bd2bf27b6c5e10d2315a2d/activerecord/lib/active_record/railties/databases.rake#L389-L392

  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

https://github.com/rails/rails/blob/e483bc5965d91976a7bd2bf27b6c5e10d2315a2d/activerecord/lib/active_record/tasks/database_tasks.rb#L188-L218