17

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

我在这里读到了关于使用

Debugger.wait_connection = true
Debugger.start_remote

启动远程调试会话,但这并没有真正奏效。

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

4

2 回答 2

28

如果您使用多个具有完整 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]
于 2012-10-30T11:50:56.790 回答
3

一种方法是在 gemfile 中正常要求调试器,并debugger根据需要在代码中正常添加。当服务器到达那条线时,它将停止,但工头不会对此进行详细说明。在您的工头控制台中,您可以盲目输入irb,然后您才会看到提示出现。糟糕的用户体验,对吧?

另一种(增强)方法是跟踪您的日志:

tail -f log/development.log

希望这可以帮助。

于 2012-08-10T21:49:44.413 回答