🐷

rails db:structure:{dump,load} が廃止されるよという話

2021/06/20に公開

特に書くトピックがなかったので、最近業務で対応したことについて...

結論

Rails7.0からrailsタスクであるrails db:structure:loadrails db:structure:dumpが廃止され、rails db:schema:{dump,load}に統一されます。

参照PR: https://github.com/rails/rails/pull/39470

これまで (Rails6系まで)

Rails6.1系までは、両者は使い分けられていました。

rails db:schema:{dump,load}

db/schema.rbをdump or load していました。

rails db:structure:{dump,load}

db/structure.sqlをdump or load していました。

ただRails6.1 に上げたときから警告が出るようになりました。

DEPRECATION WARNING: Using `bin/rails db:structure:load:primary`
is deprecated and will be removed in Rails 6.2.
Configure the format using `config.active_record.schema_format = :sql`
to use `structure.sql` and
run `bin/rails db:schema:load:primary` instead.
(called from <top (required)> at ./bin/rails:9)

これから (Rails7系から)

警告を読めば書いてあるのですが、

  • bin/rails db:structure:loadは非推奨になり、Rails6.2で削除されます。
    • 実際には 6.2 ではなく 7.0 で開発されています。 参照
  • bin/rails db:schema:loadstructure.sqlを使うために、config.active_record.schema_format = :sqlを設定してください。

つまりタスクはrails db:schema:{dump,load}に統一され、
config/application.rbあたりにconfig.active_record.schema_format = :sqlを設定すればdb/structure.sql、特に何も設定しなければdb/schema.rbをもとにタスクが実行されます。

以上、小ネタでしたー

Discussion