【发布时间】:2015-03-22 12:29:26
【问题描述】:
引用that answer 我试图使用OptionParser 来解析rake 参数。我从那里简化了示例,我必须添加两个 ARGV.shift 才能使其工作。
require 'optparse'
namespace :user do |args|
# Fix I hate to have here
puts "ARGV: #{ARGV}"
ARGV.shift
ARGV.shift
puts "ARGV: #{ARGV}"
desc 'Creates user account with given credentials: rake user:create'
# environment is required to have access to Rails models
task :create => :environment do
options = {}
OptionParser.new(args) do |opts|
opts.banner = "Usage: rake user:create [options]"
opts.on("-u", "--user {username}","Username") { |user| options[:user] = user }
end.parse!
puts "user: #{options[:user]}"
exit 0
end
end
这是输出:
$ rake user:create -- -u foo
ARGV: ["user:create", "--", "-u", "foo"]
ARGV: ["-u", "foo"]
user: foo
我认为ARGV.shift 不应该这样做。我想知道为什么没有它就无法工作以及如何以适当的方式修复它。
【问题讨论】:
-
当您尝试使用
rake user:create -- -u foo时,有什么方法可以避免使用exit(0)和rake而不是抛出"Don't know how to build task 'foo'"?如果您不想让rake停在那里怎么办?OptionParser#parse不允许使用-u=foo...
标签: ruby-on-rails ruby rake rake-task