やきにくとくにきや

WEBサービスとイベントに夢見るエンジニアの技術メモ、チラシの裏。そして焼肉たべたい

rake:task をcontrolloerから叩く場合の引数の渡し方

   

WEB画面で何か操作をした時にバッチを実行したい場合など、controllerからrake:taskを叩きたい場合がある

[ruby]
require 'rake'
Rails.application.load_tasks
Rake::Task['hogeName:getFuga'].execute
[/ruby]

で呼び出せる

タスクに引数を渡す場合
・引数を定義する
・環境変数として渡す

の二通りの方法がある

それぞれの書き方

■引数を定義する
controller側
[ruby]
Rails.application.load_tasks
Rake::Task['hogeName:getFuga'].execute(id: 1001)
[/ruby]

task側
[ruby]
namespace :hoge do
task :hello do |t, args|
puts "Hello, #{args['firstname']} #{args['lastname']}"
end
end
[/ruby]

■環境変数として渡す
controller側
[ruby]
Rails.application.load_tasks
ENV['id'] = 1001
Rake::Task['hogeName:getFuga'].execute
[/ruby]

task側
[ruby]
namespace :hoge do
task getFuga: :environment do |t|
p ENV['id']
end
end
[/ruby]

参考
http://qiita.com/tamano/items/385350ef664e07fe7655
http://www.ownway.info/Ruby/rake/arguments

 - ruby&rails