我試圖將參數列表傳遞給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