Railsで開発してるとしょっちゅう実行するやつですね。
コマンドだとこう
$ rails db:migrate RAILS_ENV=development
まぁ環境変数はお好みですかね。
これでmigrateが実行されるわけですが、ではコマンドだとどうなるのか?
答えはdevelopment.logの中にある
log/development.log
というとこに記録が残ってます。
例を載せるとこんな感じ。
Migrating to CreateUser (20220122084931)
[1m[35m (10.9ms)[0m [1m[35mCREATE TABLE `users` (`id` bigint NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` varchar(255), `email` varchar(255) NOT NULL, `created_at` datetime(6) NOT NULL, `updated_at` datetime(6) NOT NULL)[0m
[1m[35m (0.3ms)[0m [1m[35mBEGIN[0m
[1m[36mprimary::SchemaMigration Create (2.6ms)[0m [1m[32mINSERT INTO `schema_migrations` (`version`) VALUES ('20220122084931')[0m
[1m[35m (1.1ms)[0m [1m[35mCOMMIT[0m
何してるかと言うと、Migrating to 〜〜で始まって、まず実行したいmigrate内容のSQLを実行。最初だとCREATEやらALTERが多いかな。
その後にschema_migrationsテーブルに実行履歴としてファイル名の先頭にある日時の数字を保存してる。
なのでこの2つのクエリをMySQLで実行してあげればそのままmigrateしたのと同じになる。