如何将命名参数传递给Rake任务?

有没有办法在不使用环境变量的情况下将命名参数传递给Rake任务?

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

环境变量

$ rake my_task foo=bar 

这将创建一个名为foo的环境变量和可以通过ENV['foo']在Rake任务my_task访问的值bar

耙任务参数

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

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

 task :my_task, :argument_1, :argument_2 

那么argument_1的值为fooargument_2的值为bar

你可以这样说:

 rake some_task -- --arg=value 

然后,在你的任务中, ARGV将是

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

所以你可以使用OptionParser (或其他一些选项解析器)来解压缩ARGV ,就像在任何旧的CLI脚本中一样; 有趣的看--有必要让rake不要试图解析--arg=like耙开关一样。

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