25

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

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

环境变量

$ rake my_task foo=bar

这将创建一个环境变量,其名称foo和值bar可以在 Rake 任务中my_task通过ENV['foo'].

耙任务参数

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

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

task :my_task, :argument_1, :argument_2

thenargument_1将具有 valuefoo并且argument_2将具有 value bar

4

1 回答 1

29

你可以这样说:

rake some_task -- --arg=value

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

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

所以你可以使用OptionParser(或其他一些选项解析器)来解包ARGV,就像在任何旧的 CLI 脚本中一样;有趣的外观--对于防止 rake 尝试解析--arg=like为 rake 开关是必要的。

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

于 2011-02-23T03:19:46.023 回答