16

フォアマンを使用してレールと sidekiq サーバーを起動するレール アプリケーションがあります。foreman は通常の byebug とうまくやり取りできないため (入力時にプロンプ​​トが表示されない)、Rails サーバーと sidekiq サーバーの両方にリモート デバッグをセットアップしました。これは Rails サーバーでは完全に機能しますが、sidekiq サーバーの byebug サーバーに接続すると、次のようになります。

$ bundle exec byebug -R localhost:58501
Connecting to byebug server localhost:58501...
Connected.
(byebug:ctrl)

そして、byebug ブレークポイントをキャッチできません。

ドキュメントによると、(byebug:ctrl) プロンプトは、プログラムが正常に終了したことを意味します ( https://github.com/deivid-rodriguez/byebug/blob/master/GUIDE.md )が、sidekiq は問題なくジョブを実行しています。 .

構成に何か問題がありますか、それとも sidekiq が byebug のリモート デバッグと互換性がないだけですか?

プロファイル:

sidekiq: bundle exec sidekiq
rails: rails server

config/initializers/byebug.rb:

if Rails.env.development?
  require 'byebug'

  def find_available_port
    server = TCPServer.new(nil, 0)
    server.addr[1]
  ensure
    server.close if server
  end

  port = find_available_port

  puts "Starting remote debugger..."
  Byebug.start_server 'localhost', port
  puts "Remote debugger on port #{port}"
end

リモート デバッグを使用しない場合、byebug は sidekiq で正常に機能することに注意してください (ただし、フォアマンでは入力時にプロンプ​​トが表示されません)。

Byebug.wait_connection = trueまた、以前Byebug.start_serverに使用してみましたが、同じ問題があることに注意してください。

4

1 に答える 1

2

これをローカルで複製しようとしましたが、sidekiq 3.3.1 と byebug 9.0.5 では、require を少し調整するだけで問題なく動作するようです。

require 'byebug/core'

def find_available_port
  server = TCPServer.new(nil, 0)
  server.addr[1]
ensure
  server.close if server
end

port = find_available_port

puts "Starting remote debugger..."
Byebug.start_server 'localhost', port
puts "Remote debugger on port #{port}"

仕事:

class TestJob
  include Sidekiq::Worker

  def perform
    byebug
  end
end
于 2016-12-23T10:04:31.990 に答える