我正在尝试使用工头来启动我的 Rails 应用程序。不幸的是,我在连接我的 IDE 进行调试时遇到了困难。
我在这里读到了关于使用
Debugger.wait_connection = true
Debugger.start_remote
启动远程调试会话,但这并没有真正奏效。
问题: 有没有办法调试由工头启动的 rails (3.2) 应用程序?如果是这样,方法是什么?
我正在尝试使用工头来启动我的 Rails 应用程序。不幸的是,我在连接我的 IDE 进行调试时遇到了困难。
我在这里读到了关于使用
Debugger.wait_connection = true
Debugger.start_remote
启动远程调试会话,但这并没有真正奏效。
问题: 有没有办法调试由工头启动的 rails (3.2) 应用程序?如果是这样,方法是什么?
如果您使用多个具有完整 rails 环境的工作人员,则可以使用以下初始化程序:
# Enabled debugger with foreman, see https://github.com/ddollar/foreman/issues/58
if Rails.env.development?
require 'debugger'
Debugger.wait_connection = true
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}"
Debugger.start_remote(nil, port)
end
在工头的日志中,您将能够找到调试器的端口:
$ foreman start
12:48:42 web.1 | started with pid 29916
12:48:42 worker.1 | started with pid 29921
12:48:44 web.1 | I, [2012-10-30T12:48:44.810464 #29916] INFO -- : listening on addr=0.0.0.0:5000 fd=10
12:48:44 web.1 | I, [2012-10-30T12:48:44.810636 #29916] INFO -- : Refreshing Gem list
12:48:47 web.1 | Remote debugger on port 59269
12:48:48 worker.1 | Remote debugger on port 41301
现在使用以下命令运行调试器:
rdebug -c -p [PORT]
一种方法是在 gemfile 中正常要求调试器,并debugger
根据需要在代码中正常添加。当服务器到达那条线时,它将停止,但工头不会对此进行详细说明。在您的工头控制台中,您可以盲目输入irb
,然后您才会看到提示出现。糟糕的用户体验,对吧?
另一种(增强)方法是跟踪您的日志:
tail -f log/development.log
希望这可以帮助。