Как передать именованные аргументы в задачу Rake?

Есть ли способ передать именованные аргументы в задачу Rake без использования переменных среды?

Мне известно, что задачи Rake могут принимать аргументы в двух форматах:

Переменные среды

$ rake my_task foo=bar

Это создает переменную среды с именем foo и значением bar, к которому можно обратиться в задаче Rake my_task на ENV['foo'].

Аргументы задачи Rake

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

Это передает значения foo и bar в первые два аргумента задачи (если они определены). Если my_task были определены как:

task :my_task, :argument_1, :argument_2

тогда argument_1 будет иметь значение foo, а argument_2 будет иметь значение bar.

Ответы

Ответ 1

Вы можете сказать такие вещи:

rake some_task -- --arg=value

И затем, внутри вашей задачи, ARGV будет

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

чтобы вы могли использовать OptionParser (или какой-либо другой парсер параметров) для распаковки ARGV, как в любом старом CLI script; смешно выглядящий -- необходим, чтобы грабли не пытались разобрать --arg=like как переключатель грабли.

Вероятно, вам будет лучше со стандартным подходом к переменной окружения, он не такой уродливый, как все элементы --, и это обычный способ передачи аргументов для задач rake.