railsのmigrationをhookする方法

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の前後に任意のシェルスクリプトを実行しています。



参考リンク


Rake で任意のタスクの前後に別のタスクを実行する


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール