【问题标题】:How can I pass named arguments to a Rake task?如何将命名参数传递给 Rake 任务?
【发布时间】:2025-12-12 23:30:02
【问题描述】:

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

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

环境变量

$ rake my_task foo=bar

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

Rake 任务参数

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

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

task :my_task, :argument_1, :argument_2

那么argument_1 的值为fooargument_2 的值为bar

【问题讨论】:

    标签: ruby arguments rake task named-parameters


    【解决方案1】:

    你可以这样说:

    rake some_task -- --arg=value
    

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

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

    所以你可以使用OptionParser(或其他选项解析器)解压ARGV,就像在任何旧的CLI脚本中一样;看起来很有趣的 -- 是防止 rake 尝试将 --arg=like 解析为 rake 开关所必需的。

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

    【讨论】: