Подтвердить что ты не робот

Как отладить приложение rails (3.2), начатое мастером?

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

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

Debugger.wait_connection = true
Debugger.start_remote

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

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

4b9b3361

Ответ 1

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

# 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]

Ответ 2

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

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

tail -f log/development.log

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