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

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

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

我希望将这个值从命令行传递到rake任务,或者从另一个耙任务。

我该怎么做?


白衣非少年
浏览 656回答 3
3回答

慕姐8265434

选项和依赖项必须在数组中:namespace :thing do   desc "it does a thing"   task :work, [:option, :foo, :bar] do |task, args|     puts "work", args  end   task :another, [:option, :foo, :bar] do |task, args|     puts "another #{args}"     Rake::Task["thing:work"].invoke(args[:option], args[:foo], args[:bar])     # or splat the args     # Rake::Task["thing:work"].invoke(*args)   endend然后rake thing:work[1,2,3]=> work: {:option=>"1", :foo=>"2", :bar=>"3"}rake thing:another[1,2,3]=> another {:option=>"1",  :foo=>"2", :bar=>"3"}=> work: {:option=>"1", :foo=>"2", :bar=>"3"}注:可变task是任务对象,除非您了解/关心Rake内部组件,否则不会很有帮助。Rails注:如果从Rails运行任务,最好通过添加=> [:environment]这是一种设置相依任务。  task :work, [:option, :foo, :bar] => [:environment] do |task, args|     puts "work", args  end

心有法竹

通过向任务调用添加符号参数,可以在rake中指定形式参数。例如:require&nbsp;'rake'task&nbsp;:my_task,&nbsp;[:arg1,&nbsp;:arg2]&nbsp;do&nbsp;|t,&nbsp;args| &nbsp;&nbsp;puts&nbsp;"Args&nbsp;were:&nbsp;#{args}"endtask&nbsp;:invoke_my_task&nbsp;do &nbsp;&nbsp;Rake.application.invoke_task("my_task[1,&nbsp;2]")end#&nbsp;or&nbsp;if&nbsp;you&nbsp;prefer&nbsp;this&nbsp;syntax...task&nbsp;:invoke_my_task_2&nbsp;do &nbsp;&nbsp;Rake::Task[:my_task].invoke(3,&nbsp;4)end#&nbsp;a&nbsp;task&nbsp;with&nbsp;prerequisites&nbsp;passes&nbsp;its&nbsp;#&nbsp;arguments&nbsp;to&nbsp;it&nbsp;prerequisitestask&nbsp;:with_prerequisite,&nbsp; &nbsp;&nbsp;[:arg1,&nbsp;:arg2]&nbsp;=>&nbsp;:my_task&nbsp;#<-&nbsp;name&nbsp;of&nbsp;prerequisite&nbsp;task#&nbsp;to&nbsp;specify&nbsp;default&nbsp;values,&nbsp;#&nbsp;we&nbsp;take&nbsp;advantage&nbsp;of&nbsp;args&nbsp;being&nbsp;a&nbsp;Rake:: &nbsp;&nbsp;TaskArguments&nbsp;objecttask&nbsp;:with_defaults,&nbsp;:arg1,&nbsp;:arg2&nbsp;do&nbsp;|t,&nbsp;args| &nbsp;&nbsp;args.with_defaults(:arg1&nbsp;=>&nbsp;:default_1,&nbsp;:arg2&nbsp;=>&nbsp;:default_2) &nbsp;&nbsp;puts&nbsp;"Args&nbsp;with&nbsp;defaults&nbsp;were:&nbsp;#{args}"end然后,从命令行:>&nbsp;rake&nbsp;my_task[1,2] Args&nbsp;were:&nbsp;{:arg1=>"1",&nbsp;:arg2=>"2"} >&nbsp;rake&nbsp;"my_task[1,&nbsp;2]" Args&nbsp;were:&nbsp;{:arg1=>"1",&nbsp;:arg2=>"2"} >&nbsp;rake&nbsp;invoke_my_task Args&nbsp;were:&nbsp;{:arg1=>"1",&nbsp;:arg2=>"2"} >&nbsp;rake&nbsp;invoke_my_task_2 Args&nbsp;were:&nbsp;{:arg1=>3,&nbsp;:arg2=>4} >&nbsp;rake&nbsp;with_prerequisite[5,6] Args&nbsp;were:&nbsp;{:arg1=>"5",&nbsp;:arg2=>"6"} >&nbsp;rake&nbsp;with_defaults Args&nbsp;with&nbsp;defaults&nbsp;were:&nbsp;{:arg1=>:default_1,&nbsp;:arg2=>:default_2} >&nbsp;rake&nbsp;with_defaults['x','y'] Args&nbsp;with&nbsp;defaults&nbsp;were:&nbsp;{:arg1=>"x",&nbsp;:arg2=>"y"}如第二个示例所示,如果要使用空格,目标名称周围的引号是必要的,以防止shell在空间中分割参数。查看rake.rb,看起来rake不解析任务字符串来提取先决条件的参数,所以您不能这样做。task :t1 => "dep[1,2]"..为先决条件指定不同参数的唯一方法是在依赖任务操作中显式调用它,如:invoke_my_task和:invoke_my_task_2.请注意,有些shell(如zsh)要求您转义括号:rake my_task\['arg1'\]

喵喵时光机

除了kch的回答(我没有找到如何留下评论,对不起):您不必将变量指定为ENV变量之前的变量。rake命令。您可以像通常那样设置命令行参数:rake&nbsp;mytask&nbsp;var=foo并以ENV变量的形式访问rake文件中的这些变量,如下所示:p&nbsp;ENV['var']&nbsp;#&nbsp;=>&nbsp;"foo"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby