2010-09-29 56 views

回答

0

我沒有直接的答案,但我確實有一個替代解決方案可能適合你。我的rake任務都沒有使用參數。 (我想我試圖使用參數,並且無法讓它們工作。)相反,我依賴ENV數組。因此,舉例來說,我會寫這個例子的任務,因爲:

task :name =>:pre_name do 
    do_something_with_name(ENV['first_name'], ENV['last_name']) 
end 

這將被調用爲:

$ rake name first_name=John last_name=Smith 

的ENV陣列中的數據將提供給pre_name任務爲好。

3

我知道我遲到了派對,但我遇到了同樣的問題,並且發現了一些沒有使用環境變量的東西。您可以使用Rake::Task.invoke來執行此操作。下面是一個數據庫備份rake任務的例子:

namespace :db do 
    task :dump_db, [:dump_file, :rails_env] do |t, args| 
     puts "dumping to #{args[:dump_file]} with rails env = #{args[:rails_env]}" 
    end 

    task :stop_slave do 
     puts "stopping slave" 
    end 

    task :start_slave do 
     puts "starting slave" 
    end 

    task :upload_dump, [:dump_file] do |t, args| 
     puts "uploading #{args[:dump_file]}" 
    end 

    task :backup_to_s3, [:dump_file, :rails_env] do |t, args| 
     Rake::Task["db:stop_slave"].invoke() 
     Rake::Task["db:dump_db"].invoke(args[:dump_file], args[:rails_env]) 
     Rake::Task["db:start_slave"].invoke() 
     Rake::Task["db:upload_dump"].invoke(args[:dump_file]) 
    end 
end 
+0

雖然這個作品,請注意,它不會設置引用的任務是明確的先決條件相關。 – ledhed2222 2017-10-10 16:45:16

9

這其實很簡單 - :前置任務將獲得相同的參數原始任務。所有你需要做的就是確保簽名是相似的 - 例如,如果第一個任務收到:a::b:pre任務也需要接收它們。

查看更多在這裏:rake with params

+0

非常好!正是我需要的! – nterry 2013-06-13 22:25:40

-1
namespace :shell do 

    desc "Local hostname" 
    task :hostname do 
    puts "Local hostname" 
    sh "hostname" 
    end 

    desc "Local uptime" 
    task :uptime do 
    puts "Local uptime" 
    sh "uptime" 
    end 

    desc "Echo something" 
    task :echo,[:someword] do |t,args| 
    puts "--- #{args[:someword]} ---" 
    end 

end 


desc "Run all tasks" 
task :all , [:someword] => ["shell:hostname","shell:uptime","shell:echo"] do 
    puts "Done." 
end 
+0

您可以用4個前導空格標記源代碼 - 但您想要回答什麼?請給出一些信息,你想說你的代碼示例.. – knut 2015-09-28 20:40:18