Rake执行多个参数

时间:2011-11-07 06:18:11

标签: ruby-on-rails ruby rake

我在任务中调用rake任务,在调用execute

时遇到了障碍
response = Rake::Task["stuff:sample"].execute[:match => "HELLO"]

response = Rake::Task["stuff:sample"].execute[:match => "HELLO",:freq=>'100']

致电任务

task :sample, [:match,:freq] => :environment  do |t, args|

我得到的错误是“无法将哈希转换为整数”

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

我认为问题在于您没有发布的代码。对我来说很好:

james@James-Moores-iMac:/tmp$ head r.rb call.rb 
==> r.rb <==
task :sample, [:match,:freq] do |t, args|
  puts "hello world"
  puts args[:match]
end

==> call.rb <==
require 'rubygems'
require 'rake'
load 'r.rb'
Rake::Task["sample"].execute :match => "HELLO"
james@James-Moores-iMac:/tmp$ ruby call.rb 
hello world
HELLO
james@James-Moores-iMac:/tmp$ 

答案 1 :(得分:3)

执行语法中的方括号让我感到困惑。这是一种特殊的rake语法(你可能使用不正确)或者你的意思是发送一个带有一个元素的数组(一个哈希)? 这不是一样的吗?

response = Rake::Task["sample"].execute([:match => "HELLO",:freq=>'100'])

除此之外,Task#execute期待Rake:TaskArguments。

class TaskArguments
    ...

    # Create a TaskArgument object with a list of named arguments
    # (given by :names) and a set of associated values (given by
    # :values).  :parent is the parent argument object.
    def initialize(names, values, parent=nil)

您可以使用:

stuff_args = {:match => "HELLO", :freq => '100' }
Rake::Task["stuff:sample"].execute(Rake::TaskArguments.new(stuff_args.keys, stuff_args.values))

您还可以使用Task#invoke,它将接收基本的args。如果您多次调用它,请确保Task#reenable

答案 2 :(得分:0)

这篇文章很老了,但是我发现第一个答案是错误的,因为它在数组中传递了一个散列。我们可以通过以下方式将参数传递为散列来发送参数

..

在rake任务中,我们可以以.response = Rake::Task["sample"].execute(match: "HELLO", freq: 100) 的形式在args中访问它们