2


ドキュメントの backgroundrb に引数のリストを渡そうとして います:
MiddleMan.worker(:billing_worker).async_charge_customer(:arg => current_customer.id)

しかし、それは1つの引数に対してのみ機能します。これらを試しましたが、何も機能しませんでした args => [1,2,3] args => {:t="t", :r=> "r"}

これを解決する方法はありますか??

4

2 に答える 2

1

あなたがしようとしていることは、私には理にかなっているように思えます。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 コード自体にデバッグ ステートメントを追加しましたか? (私は通常、いくつかの puts ステートメントを追加し、問題が発生したときに検査します。)

最後に、delayed_job の使用を検討しましたか? 今日のRailsコミュニティでは、より多くの注目を集めています。

于 2010-02-08T16:55:48.627 に答える
0

実際には、試した2番目の方法(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 })

基本的に、ここで行っているのは、ワーカーが受け入れる1つの引数として単一のハッシュを渡すことです。ただし、ハッシュには複数のキーと値のペアを含めることができるため、ワーカー内でこれらすべてに個別にアクセスできます。

于 2011-06-02T03:25:15.657 に答える