3

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

问题:

  • 我的一位工作人员有错误,与 resque-web 不同,sidekiq-web 没有显示错误的完整详细信息(如行号和错误原因)
  • 我无法正确调试我的工作人员,是否有解决方法?在终端我只是得到类似的东西

错误:

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

更精确的错误是必须的!

4

3 回答 3

4

尝试改变

def self.perform(params...)

def perform(params...)
于 2012-07-16T10:25:49.390 回答
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

于 2014-07-02T13:25:05.230 回答
1

使用 Pry 调试 Sidekiq:

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

您可以使用Sidekiq 内联基础设施通过 pry调试 Sidekiq:

Sidekiq 内联基础设施覆盖 perform_async 并且它实际上调用perform而不是perform_async。这允许工作人员在测试环境中内联运行。

您需要将以下内容添加到您的代码中:

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

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

注意:如果您必须在线程环境中运行作业以测试并发性或性能,这对您没有帮助。

于 2016-09-28T06:59:58.143 回答