1

我有一个接受多个命令行参数的 Rake 任务。我更喜欢支持将参数传递给任务的 key=value 语法,例如:

rake deploy verbose=true environment=production dry-run=true

我遇到的问题是“空运行”论点。运行该 Rake 任务后,我收到以下消息:

不知道如何构建任务'dry-run = true'

“dry-run”是命令行上的第一个、中间还是最后一个参数都没有关系。我可以接受使用“数组”样式的参数:

rake deploy[true,production,true]

但我不喜欢这样,我可以删除炒作:

rake deploy verbose=true environment=production dryrun=true

但是我希望有某种方法可以在参数名称中使用连字符,但我在任何讨论这个问题的地方都找不到任何东西。

4

1 回答 1

2

这些变量由您的 shell 管理。他什么rake时候ENV['verbose']只是问shell,“嘿,你有什么价值叫做'verbose'吗?如果有,给我”。

Shell 通常无法处理变量名中的连字符;与大多数编程语言一样,hypen 是为减法运算保留的。

最简单的解决方法是将连字符替换为下划线:

rake deploy verbose=true environment=production dry_run=true

编辑:

另一种选择是使用更适合命令行管理的东西。thor应该允许您像这样定义命令:

deploy --verbose --environment=production --dry-run

编辑2:

事实证明,这些值是逐字传递给 rake 的,而不是像我想的那样由 shell 处理 - 有关详细信息,请参阅对此答案的第一条评论。尽管如此,在这个答案上提出的解决方案仍然有效。

于 2012-10-02T11:28:33.340 回答