Rails6, 7でのdb系rakeタスクの確認
この辺いつも忘れるのでメモ。
あと、paperclipを削除するときにmigrationファイルの add_attachment
が残ってしまう問題があったので、どう影響するかの確認のためでもある。
db:migrate
migrateファイルを日付け順に実行する。なので、削除された外部依存(e.g. paperclipの add_attachment
)があればそこでundefinedのエラーになる。
db:schema:load
schema.rbから実行する。migrateファイルは実行しない。速いのでいいのだけど、
execute (“ALTER TABLE apples AUTO_INCREMENT = 9999”)
みたいなのはschemaに載らないので実行されないのに注意。
db:prepare
6以降のbin/setupからはこれが呼ばれる。以下の挙動の通りなので、普段はこれ呼ぶだけでもいい。
DBがなければ以下を実行。
- db:create
- db:schema:load
- db:seed
DBがあれば以下を実行。
- db:migrate
db:setup
DBがなければ作り、あってもスキーマロードを実行する。なので、普段からこれを使うことはない。
- db:create
- db:schema:load
- db:seed
db:truncate_all
テーブルを全部truncateしてくれる。 Rails6の時点でヘルプに出てこなかったけど存在している。 rails/databases.rake at d5fc7da4c39470a8f5b0055eddc2d1bca2d034e3 · rails/rails · GitHub
paperclipを削除して困らない?
困らないので削除していい。
削除して困るのは一から db:migrate
を実行するケース。
本番環境では、最初からmigrateすることはない。
開発環境では、 db:prepare
でスキーマロードするのでいい。ALTER TABLE
が走らないけど開発環境なら支障はない。
ステージング環境を増やすみたいなときは、既存の環境のデータを持ってきて、 db:truncate_all
すればいい。そしたらデータがなくてAUTO_INCREMENTが進んだ状態を作れる。
ということで、マイグレーションを一から実行することはないので、squasher gemみたいなのは使う意味がないと思う。