如何将命令行参数传递给rake任务

我有一个rake任务,需要在多个数据库中插入一个值

我想从命令行或从另一个rake任务将此值传递到rake任务中

我该怎么做

通过向任务调用添加符号参数,可以在rake中指定形式参数。例如:

需要“rake”
任务:我的任务,[:arg1,:arg2]do | t,args|
puts“Args是类#{Args.class}的#{Args}”
放置“arg1是类{args[:arg1].class}的“{args[:arg1]}”
放置“arg2是类{args[:arg2]}的“{args[:arg2]}”
终止
任务:调用我的任务
Rake.application.invoke_任务(“我的_任务[1,2]”)
终止
#或者如果您喜欢这种语法。。。
任务:调用我的任务
Rake::Task[:my_Task].invoke(3,4)
终止
#具有先决条件的任务通过其
#对其先决条件的争论
任务:先决条件为[:arg1,:arg2]=>:我的任务<-先决条件任务的名称
#要指定默认值,
#我们利用args作为Rake::TaskArguments对象的优势
任务:使用默认值,:arg1,:arg2 do | t,args|
参数。具有默认值(:arg1=>:default\u 1,:arg2=>:default\u 2)
puts“具有默认值的参数为:#{Args}”
终止

然后,从命令行:

>rake my_任务[1,false]
参数是Rake::TaskArguments类的:{:arg1=>“1”,:arg2=>“false”}
arg1是类字符串的“1”
arg2是类字符串的“false”
>rake“我的任务[1,2]”
arg为:{:arg1=>“1”,:arg2=>“2”}
>rake调用我的任务
arg为:{:arg1=>“1”,:arg2=>“2”}
>rake调用我的任务2
arg为:{:arg1=>3,:arg2=>4}
>带_先决条件的耙子[5,6]
arg为:{:arg1=>“5”,:arg2=>“6”}
>使用默认值rake
具有默认值的arg为:{:arg1=>:default_1,:arg2=>:default_2}
>使用_默认值['x','y']进行耙
默认值为:{:arg1=>“x”,:arg2=>“y”}

如第二个示例所示,如果要使用空格,则必须在目标名称周围加引号,以防止shell在空格处拆分参数

查看rake.rb中的代码,rake似乎没有解析任务字符串以提取先决条件的参数,因此您无法执行task:t1=>“dep[1,2]”。为先决条件指定不同参数的唯一方法是在从属任务操作中显式调用它,如:invoke_my_task:invoke_my_task_2中所示

请注意,有些shell(如zsh)要求您转义括号:rake my\u task\['arg1'\]

发表评论