关于ruby:如何将命名参数传递给Rake任务?

How can I pass named arguments to a Rake task?

有没有一种方法可以不使用环境变量将命名参数传递给rake任务?

我知道rake任务可以接受两种格式的参数:

环境变量

1
$ rake my_task foo=bar

这将创建一个名为foo和值为bar的环境变量,该值可由ENV['foo']在rake任务my_task中访问。

rake任务参数

1
$ rake my_task['foo','bar']

这会将值foobar传递给前两个任务参数(如果定义了它们)。如果my_task定义为:

1
task :my_task, :argument_1, :argument_2

那么,argument_1的值为fooargument_2的值为bar


你可以这样说:

1
rake some_task -- --arg=value

然后,在你的任务中,ARGV

1
[ 'some_task', '--arg=value' ]

因此,您可以使用OptionParser(或其他一些选项分析器)解包ARGV,就像在任何旧的cli脚本中一样;有趣的--对于防止rake尝试将--arg=like解析为rake开关是必需的。

使用标准环境变量方法可能会更好一些,它不像所有的--东西那样难看,而且它是传递参数以执行rake任务的常见方法。