##よくある引数ありのrakeタスク
% rails g task task_name
でタスク生成
namespace :task_name do
desc "実行処理の説明"
task :create, ['hoge', 'fuga'] => :environment do |task, args|
p task
p args
end
end
###実行
% rake 'task_name:create[foo, bar]'
# 実行結果
<Rake::Task task_name:create => [environment]>
{:hoge=>"foo", :fuga=>"bar"}
この受け取り方だとargsは予め指定した形のHashになるので、可変長は渡しづらい
対策
ARGVから引数を受け取る
namespace :task_name do
desc "実行処理の説明"
task create: :environment do |task|
p ARGV
p task.name
# sliceしたいけどARGVはfrozenなのでdup
copy = ARGV.first.dup
copy.slice!(task.name)
#配列っぽい文字列("[foo,bar]")が出来るので配列にする
args = YAML.load(copy)
p args
end
end
実行
% bundle exec rake 'task_name:create[foo,bar]'
# 実行結果
["task_name:create[foo,bar]"]
"task_name:create"
["foo", "bar"] #=>Array
ひとまず満足