railsのmigrationをhookして任意のコードを実行する方法メモ。
railsのmigrationをhookして任意のコードを実行する方法
migrationのrakeタスクをhookすることで実現できる。Rakefileに下記のコードを書くだけでOK。
# vi [rails root]/Rakefile task :mybefore do system("sh #{Rails.root.join('bin', 'mybefore.sh')}") system("echo 'mybefore.sh done'") end task :myafter do system("sh #{Rails.root.join('bin', 'myafter.sh')}") system("echo 'myafter.sh done'") end Rake::Task["db:create"].enhance([:mybefore]) do Rake::Task[:myafter].invoke end Rake::Task["db:migrate"].enhance([:mybefore]) do Rake::Task[:myafter].invoke end
上記のコードでは、db:createとdb:migrateの前後に任意のシェルスクリプトを実行しています。