用sidekiq调试工人?

时间:2012-07-12 13:41:25

标签: ruby-on-rails-3 debugging sidekiq

我从resque转换为sidekiq gem for ruby​​ on rails app,以减少内存使用和更快的响应时间。

问题:

  • 我的一个工人有错误,而且不像resque-web,sidekiq-web没有显示错误的完整细节(如行号和错误原因)
  • 我无法正确调试我的工作人员,有解决方法吗?在终端我只是得到像
  • 这样的东西

错误:

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

必须有更精确的错误!

3 个答案:

答案 0 :(得分:4)

尝试更改

def self.perform(params...)

def perform(params...)

答案 1 :(得分: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

答案 2 :(得分:1)

使用Pry调试Sidekiq:

通常,Sidekiq服务器在执行语句时不会启动Pry。

您可以使用Sidekiq inline infrastructure通过pry调试Sidekiq:

Sidekiq内联基础架构会覆盖perform_async及其 实际上调用执行而不是 perform_async 。这允许工作人员以内联方式运行 测试环境。

您需要在代码中添加以下内容:

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

现在Pry将能够调用perform方法。

注意:如果您必须在线程环境中运行作业来测试并发性或性能,这将无济于事。