我想创建一个rake任务,它接受一个没有参数的参数。
task :mytask => :environment do
options = Hash.new
OptionParser.new do |opts|
opts.on('-l', '--local', 'Run locally') do
options[:local] = true
end
end.parse!
# some code
end
但它抛出:
$ rake mytask -l
rake aborted!
OptionParser::MissingArgument: missing argument: -l
同时
$ rake mytask -l random_arg
ready
为什么?
答案 0 :(得分:1)
如果您确实采用这种方法,则需要将任务的参数与rake
自己的参数分开:
rake mytask -- -l
其中--
表示“主要参数结束”,其余部分用于您的任务。
您需要调整参数解析以仅触发那些特定参数:
task :default do |t, args|
# Extract all the rake-task specific arguments (after --)
args = ARGV.slice_after('--').to_a.last
options = { }
OptionParser.new do |opts|
opts.on('-l', '--local', 'Run locally') do
options[:local] = true
end
end.parse!(args)
# some code
end
通过这种方式解决这个问题通常非常麻烦,而且用户不太友好,所以如果你能避免它并采用其他通常更好的方法。