Как отладить приложение rails (3.2), запущенное мастером? - PullRequest
17 голосов
/ 05 марта 2012

Я пытаюсь использовать мастера, чтобы запустить мое приложение rails. К сожалению, у меня возникают трудности с подключением моей IDE для отладки.

Я прочитал здесь об использовании

Debugger.wait_connection = true
Debugger.start_remote

чтобы запустить сеанс удаленной отладки, но на самом деле это не сработает.

Вопрос: Есть ли способ отладки приложения rails (3.2), запущенного мастером? Если да, то каков подход?

Ответы [ 2 ]

28 голосов
/ 30 октября 2012

Если вы используете несколько рабочих со средой полного рельса, вы можете использовать следующий инициализатор:

# 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]
3 голосов
/ 11 августа 2012

Один из подходов - обычно требовать отладчик в вашем gemfile и добавлять debugger обычно в ваш код по мере необходимости.Когда сервер попадет в эту строку, он остановится, но мастер не будет многословен по этому поводу.В консоли мастера вы можете вслепую набрать irb, и только тогда вы увидите приглашение.Плохой UX, верно?

Другой (усиливающий) подход заключается в том, чтобы привязывать ваши журналы:

tail -f log/development.log

Надеюсь, это поможет.

...