亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將命令行參數傳遞給rake任務

如何將命令行參數傳遞給rake任務

白衣非少年 2019-07-05 16:39:30
如何將命令行參數傳遞給rake任務我有一個rake任務,需要將一個值插入到多個數據庫中。我希望將這個值從命令行傳遞到rake任務,或者從另一個耙任務。我該怎么做?
查看完整描述

3 回答

?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

選項和依賴項必須在數組中:

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


查看完整回答
反對 回復 2019-07-05
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

通過向任務調用添加符號參數,可以在rake中指定形式參數。例如:

require 'rake'task :my_task, [:arg1, :arg2] do |t, args|
  puts "Args were: #{args}"endtask :invoke_my_task do
  Rake.application.invoke_task("my_task[1, 2]")end# or if you prefer this syntax...task :invoke_my_task_2 do
  Rake::Task[:my_task].invoke(3, 4)end# a task with prerequisites passes its # arguments to it prerequisitestask :with_prerequisite, 
  [:arg1, :arg2] => :my_task #<- name of prerequisite task# to specify default values, # we take advantage of args being a Rake::
  TaskArguments objecttask :with_defaults, :arg1, :arg2 do |t, args|
  args.with_defaults(:arg1 => :default_1, :arg2 => :default_2)
  puts "Args with defaults were: #{args}"end

然后,從命令行:

> rake my_task[1,2]
Args were: {:arg1=>"1", :arg2=>"2"}

> rake "my_task[1, 2]"
Args were: {:arg1=>"1", :arg2=>"2"}

> rake invoke_my_task
Args were: {:arg1=>"1", :arg2=>"2"}

> rake invoke_my_task_2
Args were: {:arg1=>3, :arg2=>4}

> rake with_prerequisite[5,6]
Args were: {:arg1=>"5", :arg2=>"6"}

> rake with_defaults
Args with defaults were: {:arg1=>:default_1, :arg2=>:default_2}

> rake with_defaults['x','y']
Args with defaults were: {:arg1=>"x", :arg2=>"y"}

如第二個示例所示,如果要使用空格,目標名稱周圍的引號是必要的,以防止shell在空間中分割參數。

查看rake.rb,看起來rake不解析任務字符串來提取先決條件的參數,所以您不能這樣做。task :t1 => "dep[1,2]"..為先決條件指定不同參數的唯一方法是在依賴任務操作中顯式調用它,如:invoke_my_task:invoke_my_task_2.

請注意,有些shell(如zsh)要求您轉義括號:rake my_task\['arg1'\]


查看完整回答
反對 回復 2019-07-05
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

除了kch的回答(我沒有找到如何留下評論,對不起):

您不必將變量指定為ENV變量之前的變量。rake命令。您可以像通常那樣設置命令行參數:

rake mytask var=foo

并以ENV變量的形式訪問rake文件中的這些變量,如下所示:

p ENV['var'] # => "foo"


查看完整回答
反對 回復 2019-07-05
  • 3 回答
  • 0 關注
  • 686 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號