如何调试由工头启动的rails(3.2)应用程序?

我正在尝试使用工头来启动我的rails应用程序。 不幸的是我连接IDE进行调试时遇到了困难。

我在这里阅读有关使用

Debugger.wait_connection = true Debugger.start_remote 

启动一个远程调试会话,但这并没有真正解决。

问题:有没有办法调试由工头启动的rails(3.2)应用程序? 如果是这样,那么方法是什么?

如果您使用具有完整rails环境的多个worker,则可以使用以下初始化程序:

 # 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 

希望这可以帮助。