3

Ruby on Rails アプリの resque から sidekiq gem に変換して、メモリ使用量を減らし、応答時間を短縮しました。

問題:

  • 私のワーカーの 1 つにエラーがあり、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 を起動しません。

pryを使用してSidekiqをデバッグするために、Sidekiq インライン インフラストラクチャを使用できます。

Sidekiq インライン インフラストラクチャは perform_async をオーバーライドし、実際にはperform_asyncの代わりにperformを呼び出します。これにより、ワーカーをテスト環境でインラインで実行できます。

コードに以下を追加する必要があります。

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

これで Pry は perform メソッドを呼び出せるようになります。

: これは、同時実行性またはパフォーマンスをテストするためにスレッド化された環境でジョブを実行する必要がある場合には役に立ちません。

于 2016-09-28T06:59:58.143 に答える