環境
- Rails 5
やりたいこと
Railsのtaskから別のタスクを実行したい。
方法
Railsのタスクはbundle exec rails xxx:xxxx
のように実行するが、結局実態はただのrakeタスクなのでinvoke()を実行すれば良い
namespace :sample do task hoge: :environment do |t| puts "hoge" end task piyo: :environment do |t| puts "piyo" Rake::Task["sample:hoge"].invoke end
で rails sample:piyo
を実行するとpiyoからhogeが実行される。
piyo hoge
引数を受け取る場合はinvokeメソッドで渡せば良い
namespace :sample do task :hoge, [:name] => :environment do |task, args| puts "hello ! #{args.name}" end task piyo: :environment do |t| puts "piyo" Rake::Task["sample:hoge"].invoke("taro") end
で
piyo hello ! taro
となる