foreman から unicorn を起動したため、デバッガーのプロンプトが飲み込まれてしまいました。私は過去にリモートデバッガーとして接続debugger
する宝石で運が良かった.
Ruby 2.1.2 にアップグレードしようとしていますが、これは私が理解しているように、 と互換性がありませんdebugger
。
リモート デバッガー コードを使用するように変更しましたbyebug
。
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 "Remote debugger on port #{port}"
Byebug.start_server('localhost', port)
ユニコーンが起動したら、byebug に接続できます。
$ byebug -R localhost:54623
Connecting to byebug server localhost:54623
Connected.
しかし、私のコードにはbyebug
呼び出しが散らばっていて、リモート デバッガーでブレークポイントをトリガーすることはありません。デバッガーがリモート接続されていないときにロード時にブロックするページは、リモート接続時に正常にロードされます。
unicorn ファイルはワーカーを 1 つしか指定していないため、そうではないことはほぼ確実です。
require File.dirname(__FILE__)+'/application'
if Rails.env.development?
worker_processes 1
timeout_override = ENV['WEBSERVER_TIMEOUT_OVERRIDE']
timeout Integer(timeout_override || 3600)
if timeout_override
puts "Development: Using WEBSERVER_TIMEOUT_OVERRIDE of #{timeout_override} seconds"
end
else
worker_processes Integer(ENV['WEB_CONCURRENCY'] || 3)
timeout 25
end
preload_app true
before_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
どんなアイデアでも大歓迎です。