🔨
Railsでridgepoleを導入する時にmigrationコマンドを無効にしたい
書くこと
- rakeタスクで実行するよう修正
- db:migrate:xxxタスクの実行時、それをせずにエラーメッセージを表示するよう修正
-
rails generate model
の時、migrationファイルを作らないよう修正
書かないこと
- 導入手順
- migrationからの移行手順
※ これらの手順はgithubに詳しく書いています
バージョン
- Ruby
- 3.2.2
- Rails
- 7.1.3
- ridgepole
- 2.0.2
やったこと
rakeタスクの作成
毎度オプション込みで書くのは大変なのでrakeタスク化する
lib/tasks/ridgepole.rake
namespace :ridgepole do
desc 'apply Schemafile'
task apply: :environment do
sh "ridgepole -E ##{ENV.fetch('RAILS_ENV', 'development')} --config config/database.yml --file db/Schemafile --apply"
sh 'rake db:schema:dump'
end
end
migrationの修正(無効化)
rake db:migrate
はmigrationファイルを作っていない限りは動作に影響は無いが、うっかり叩いた時にridgepoleを実行するように促したい。
なのでdb:migrate
に対してメッセージを表示する形で上書きする
lib/tasks/db_migrate.rake
Rake::Task['db:migrate'].clear
namespace :db do
desc 'migrate(not available)'
task migrate: :environment do
puts 'This project uses ridgepole for database migration'
puts 'Please use ridgepole:apply instead of db:migrate'
end
end
$ rails db:migrate
This project uses ridgepole for database migration
Please use ridgepole:apply instead of db:migrate
rails generate model
の時、migrationファイルを作らないよう修正
model作成時にはmigrationが作られる
$ rails g model hoge
invoke active_record
create db/migrate/20240322093222_create_hoges.rb
create app/models/hoge.rb
これを作られないように設定しておく
config/application.rb
module Sample
class Application < Rails::Application
## 中略
## ↓を追加する
config.generators.orm :active_record, migration: false
end
end
これでmigrationファイルが作られない
$ rails g model hoge
invoke active_record
create app/models/hoge.rb
Discussion