首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多个参数传递给backgroundrb中的worker

如何将多个参数传递给backgroundrb中的worker
EN

Stack Overflow用户
提问于 2010-02-08 21:48:06
回答 2查看 220关注 0票数 2

我正在尝试将参数列表传递给背景数据库

在文档中,它说:

MiddleMan.worker(:billing_worker).async_charge_customer(:arg => current_customer.id)

但它只适用于一个参数,我尝试了这些,但没有一个对我有效args => 1,2,3 args => {:t=>"t",:r=> "r"}

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

EN

回答 2

Stack Overflow用户

发布于 2010-02-09 00:55:49

对我来说,你正在尝试的东西似乎是合理的。我看了一下rails_worker_proxy.rb (来自github源代码)。从代码读取来看,async_*方法同时接受:arg和:args:

代码语言:javascript
复制
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)

你能分享一个代码片段吗?您是否在代码和/或后台the代码本身中添加了任何调试语句?(我通常会添加一些put语句,并在出现问题时进行检查。)

最后,您是否考虑过使用delayed_job?如今,它在Rails社区中有更多的吸引力。

票数 1
EN

Stack Overflow用户

发布于 2011-06-02 11:25:16

实际上,您尝试过的第二种方法(args => {:t=>"t", :r=> "r"})应该是有效的。

在您的worker中:

代码语言:javascript
复制
def charge_customer(arg)
  customer_id   = arg[:customer_id]
  customer_name = arg[:customer_name]

  #do whatever you need to do with these arguments...
end

然后,您可以像这样调用工人:

代码语言:javascript
复制
MiddleMan.worker(:billing_worker).async_charge_customer(:arg => { :customer_id => current_customer.id, :customer_name => current_customer.name })

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2221936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档