2011-03-05 80 views
20

我有一個需要傳遞參數的rake任務。例如,我要發出像將一個或兩個參數傳遞給Rake任務

<prompt> rake db:do_something 1 

和rake任務裏面的命令:

... 
cust = Customer.find(the_id_passed_in) 
# do something with this customer record, etc... 
... 

非常簡單的,對不對?

+2

可能重複[我如何通過命令行參數耙子任務嗎?](http://stackoverflow.com/questions/825748/how-do-i-pass-command-line-arguments-to-rake-task) – 2014-02-28 01:10:43

回答

38

rake命令接受和定義參數的方式並不美觀。

打電話給你的任務是這樣的:

<prompt> rake db:do_something[1,2] 

我添加第二個參數來表明你需要逗號,但省略任何空格。

,並確定它是這樣的:

task :do_something, :arg1, :arg2 do |t, args| 
    args.with_defaults(:arg1 => "default_arg1_value", :arg2 => "default_arg2_value") 
    # args[:arg1] and args[:arg2] contain the arg values, subject to the defaults 
end 
+1

你如何用一個需要加載rails環境的任務來做到這一點?例如通常'任務:do_something =>:環境做' – Duke 2013-05-01 20:50:08

+10

'任務:do_something,[:arg1,:arg2] =>:環境do | t,args |' – Duke 2013-05-01 20:55:18

+2

我想你想要另一個逗號:'task:do_something, :arg1' ... – 2013-08-13 21:20:18

0

雖然傳遞的參數,它是更好的選擇是輸入文件,這會是一個excel一個JSON或任何你需要的,並從那裏讀出的數據結構和變量你需要從包括變量名稱的需要。 讀取文件可以有以下結構。

namespace :name_sapace_task do 
    desc "Description task...." 
     task :name_task => :environment do 
     data = ActiveSupport::JSON.decode(File.read(Rails.root+"public/file.json")) if defined?(data) 
    # and work whit yoour data, example is data["user_id"] 

    end 
    end 

例JSON

{ 
    "name_task": "I'm a task", 
    "user_id": 389, 
    "users_assigned": [389,672,524], 
    "task_id": 3 
} 

執行

rake :name_task 
+1

爲什麼你給[兩個相同的答案](http://stackoverflow.com/a/22070576/861716)?最好回答一個問題,並將另一個問題標爲重複。 – 2014-02-27 22:58:14

相關問題