我在任务中调用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|
我得到的错误是“无法将哈希转换为整数”
有什么想法吗?
答案 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中访问它们