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

jon*_*nes 17 debugging ruby-on-rails foreman ruby-on-rails-3.2

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

在这里阅读有关使用

Debugger.wait_connection = true
Debugger.start_remote
Run Code Online (Sandbox Code Playgroud)

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

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

lua*_*sus 28

如果您使用具有完整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
Run Code Online (Sandbox Code Playgroud)

在工头的日志中,您将能够找到调试器的端口:

$ 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
Run Code Online (Sandbox Code Playgroud)

现在运行调试器使用:

rdebug -c -p [PORT]
Run Code Online (Sandbox Code Playgroud)

  • 所以,我有这个工作,但是我的调试器进程每隔30秒被杀死,因为我在我的unicorn.rb配置文件中使用Unicorn服务器和`timeout 30`.我已经尝试了几种解决方案来改变超时,如果我在开发环境中,但它不起作用.这是我正在尝试的代码:`如果ENV ['development']超时300 else timeout 30 end`.任何想法如何让它在Unicorn/Foreman上工作,而不是只在dev env中超时?谢谢!我投了赞成票 (2认同)