我试图将参数列表传递给backgroundrb
在文档中它说:
MiddleMan.worker(:billing_worker).async_charge_customer(:arg => current_customer.id)如何将多个参数传递给工作人员在backgroundrb
,但它仅适用于只是一个说法,我尝试了这些,但没有工作对我来说 ARGS => [1,2,3] ARGS => {:T => “T”: r =>“r”}
任何想法如何解决这个??
我试图将参数列表传递给backgroundrb
在文档中它说:
MiddleMan.worker(:billing_worker).async_charge_customer(:arg => current_customer.id)如何将多个参数传递给工作人员在backgroundrb
,但它仅适用于只是一个说法,我尝试了这些,但没有工作对我来说 ARGS => [1,2,3] ARGS => {:T => “T”: r =>“r”}
任何想法如何解决这个??
你对我的尝试似乎是合理的。我看了一下rails_worker_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代码中添加任何调试语句? (我通常会添加几条语句,并在事情出错时检查事情。)
最后,您是否考虑过使用delayed_job?它现在在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 })
基本上,你在做什么这里是传递一个哈希作为一个参数工人接受。但是由于哈希可以包含多个键值对,因此您可以在工作人员中单独访问所有这些。
感谢Daniel的回答,现在我几乎忘记了当时我正在使用的是什么(我在2010年二月问过)。我想我改用了delayedjob来解决这个问题.. – AndreDurao 2011-06-02 11:43:23
那么,你可能想看看代码。在这个例子中,“charge_customer”接受一个参数,所以发送:arg只有一个参数似乎没问题。我想知道为什么你从:arg改为:args虽然..你试过了吗:arg => [1,2,3]? – Trevoke 2010-02-08 16:10:28