2011-03-05 44 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

相关问题