2012-07-12 29 views
2

我將我的ruby on rails應用程序從resque轉換爲sidekiq gem,以減少內存使用量並縮短響應時間。用sidekiq調試工人?

問題:

  • 我的工人一個有錯誤,不像resque-網絡的sidekiq - 網頁上沒有顯示錯誤全部細節(如行號和錯誤的原因)
  • 我我無法正確調試我的工人,是否有解決方法?在終端我只是得到像

錯誤:

2012-07-12T13:26:19Z 64455 TID-ousyenaqg WARN: undefined method `perform' for #<BookInit:0x007f8c6f73f520> 

更精確的錯誤是一個必須有!

回答

4

嘗試改變

​​

def perform(params...) 
+1

是的,我已經發現它,錯過了那個;)它在這個修正中工作正常 – Rubytastic 2012-07-16 11:04:19

+0

+1你是怎麼知道他正在定義一個靜態方法的? – 2013-10-07 13:55:07

2

下一個代碼添加到rake任務,然後調試它就像你使用resque

require 'sidekiq' 
require 'sidekiq/cli' 

desc 'Runs Sidekiq as a rake task' 
task :debug_sidekiq => :environment do 
    begin 
    cli = Sidekiq::CLI.instance 
    cli.parse 
    cli.run 
    rescue => e 
    raise e if $DEBUG 
    STDERR.puts e.message 
    STDERR.puts e.backtrace.join("\n") 
    exit 1 
    end 
end 

的代碼做取自sidekiq/bin/sidekiq

0

使用Pry調試Sidekiq:

正常情況下,執行語句時,Sidekiq服務器不會啓動Pry。

可以使用Sidekiq inline infrastructure用撬調試Sidekiq:

的Sidekiq直列基礎設施覆蓋perform_async它 實際上是調用執行,而不是perform_async。這允許工作人員在 測試環境中內聯運行。

您需要添加以下代碼:

require 'sidekiq' 
require 'sidekiq/testing/inline' 

現在撬就能調用執行方法。

注意:如果您必須在線程環境中運行作業以測試併發性或性能,這將無濟於事。