ドキュメントの backgroundrb に引数のリストを渡そうとして
います:
MiddleMan.worker(:billing_worker).async_charge_customer(:arg => current_customer.id)
しかし、それは1つの引数に対してのみ機能します。これらを試しましたが、何も機能しませんでした args => [1,2,3] args => {:t="t", :r=> "r"}
これを解決する方法はありますか??
ドキュメントの backgroundrb に引数のリストを渡そうとして
います:
MiddleMan.worker(:billing_worker).async_charge_customer(:arg => current_customer.id)
しかし、それは1つの引数に対してのみ機能します。これらを試しましたが、何も機能しませんでした 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 コード自体にデバッグ ステートメントを追加しましたか? (私は通常、いくつかの puts ステートメントを追加し、問題が発生したときに検査します。)
最後に、delayed_job の使用を検討しましたか? 今日のRailsコミュニティでは、より多くの注目を集めています。
実際には、試した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つの引数として単一のハッシュを渡すことです。ただし、ハッシュには複数のキーと値のペアを含めることができるため、ワーカー内でこれらすべてに個別にアクセスできます。