Ruby on rails 如何在后台向工作人员传递多个参数b

Ruby on rails 如何在后台向工作人员传递多个参数b,ruby-on-rails,ruby,backgroundrb,Ruby On Rails,Ruby,Backgroundrb,我想把一系列的论点传给背景 在文档中,它说:MiddleMan.worker(:billing\u worker)。async\u charge\u customer(:arg=>current\u customer.id) 但它只对一个论点有效,我试过这些,但没有一个对我有效 args=>[1,2,3] args=>{:t=>“t”,:r=>“r”} 有什么办法可以解决这个问题吗???我觉得你的想法很合理。我查看了rails\u worker\u proxy.rb(来自github源代码)。从

我想把一系列的论点传给背景
在文档中,它说:
MiddleMan.worker(:billing\u worker)。async\u charge\u customer(:arg=>current\u customer.id)

但它只对一个论点有效,我试过这些,但没有一个对我有效 args=>[1,2,3] args=>{:t=>“t”,:r=>“r”}


有什么办法可以解决这个问题吗???

我觉得你的想法很合理。我查看了rails\u worker\u proxy.rb(来自github源代码)。从代码读取中,async_*方法同时接受:arg和:args:

arg,job_key,host_info,scheduled_at,priority = arguments && arguments.values_at(:arg,:job_key,:host,:scheduled_at, :priority)

# allow both arg and args
arg ||= arguments && arguments[:args]

# ...

if worker_method =~ /^async_(\w+)/
  method_name = $1
  worker_options = compact(:worker => worker_name,:worker_key => worker_key,
                           :worker_method => method_name,:job_key => job_key, :arg => arg)
  run_method(host_info,:ask_work,worker_options)
你能分享一段代码片段吗?您是否在代码和/或backgroundrb代码本身中添加了调试语句?(我通常会添加一些puts语句,并在出现问题时进行检查。)


最后,您是否考虑过使用延迟工作?如今,它在Rails社区有了更大的吸引力。

实际上,您尝试的第二种方法(
args=>{:t=>“t”,:r=>“r”}
)应该可以工作

在您的工作人员中:

def charge_customer(arg)
  customer_id   = arg[:customer_id]
  customer_name = arg[:customer_name]

  #do whatever you need to do with these arguments...
end
然后,你可以这样称呼工人:

MiddleMan.worker(:billing_worker).async_charge_customer(:arg => { :customer_id => current_customer.id, :customer_name => current_customer.name })

基本上,这里要做的是传递一个散列作为worker接受的一个参数。但由于散列可以包含多个键值对,因此您可以在worker中单独访问所有这些键值对

嗯,你可能想看看代码。在本例中,“charge_customer”接受一个参数,因此只发送带有一个参数的:arg就可以了。我想知道你为什么从:arg改为:args。。你有没有试过:arg=>[1,2,3]?谢谢你的回答,丹尼尔,尽管现在我几乎忘了我当时在用什么(我在2010年2月问过这个问题)。我想我换了延迟工作来解决这个问题。。