【问题标题】:debugging workers with sidekiq?用 sidekiq 调试工人?
【发布时间】:2012-07-12 06:42:46
【问题描述】:

我将我的 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>

更精确的错误是必须的!

【问题讨论】:

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


    【解决方案1】:

    尝试改变

    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

    【讨论】:

      【解决方案3】:

      使用 Pry 调试 Sidekiq:

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

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

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

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

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

      现在 Pry 可以调用 perform 方法了。

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

      【讨论】:

        猜你喜欢
        • 2016-01-30
        • 2015-03-10
        • 2018-11-05
        • 2013-09-16
        • 2019-01-16
        • 2013-12-30
        • 1970-01-01
        • 2013-11-05
        • 2018-05-15
        相关资源
        最近更新 更多