При локальном использовании Foreman с Rails 4 и прослушивателем отладки сервер не отвечает.

Я хочу использовать Foreman для локальной разработки, но также хочу иметь возможность отлаживать свой код. Чтобы это произошло, я использовал этот инициализатор:

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

как рекомендуется здесь: Как отлаживать рельсы ( 3.2) приложение запущено бригадиром?. Однако, когда я запускаю мастера, браузер ничего не может найти на порту 5000:

$ foreman start
09:48:18 web.1  | started with pid 25337
09:48:23 web.1  | => Booting Thin
09:48:23 web.1  | => Rails 4.0.0 application starting in development on http://0.0.0.0:5000
09:48:23 web.1  | => Run `rails server -h` for more startup options
09:48:23 web.1  | => Ctrl-C to shutdown server
09:48:23 web.1  | Remote debugger on port 57466

Если я перейду к 0.0.0.0:5000, я увижу:

=> Oops! Google Chrome could not connect to 0.0.0.0:5000


person Peter Nixey    schedule 26.11.2013    source источник
comment
Та же проблема, есть новости?   -  person woohoou    schedule 08.03.2014
comment
@woohou ничего, к сожалению. Я только что работал над этим   -  person Peter Nixey    schedule 10.03.2014
comment
@woohou - только что добавил ответ, который частично решает эту проблему   -  person Peter Nixey    schedule 25.03.2014


Ответы (1)


Однако это далеко не идеальное решение...

Можно использовать отладчик с Форманом и без какого-либо инициализатора. Просто вставьте оператор отладчика в свой код, как обычно, и вы увидите, что выполнение остановится.

Окно вашего терминала распечатает последние несколько строк выполнения как обычно и будет выглядеть примерно так:

11:23:57 web.1  |   Rendered editor/memberships/_memberships.html.haml (76.6ms)
11:23:57 web.1  |   Rendered editor/memberships/_memberships.html.haml (0.2ms)
11:23:57 web.1  | /rails/yourapp/yourapp-code/app/views/editor/memberships/_form.html.haml:2
11:23:57 web.1  | = simple_form_for membership, url: membership.path(:create_or_update) do |f|
11:23:57 web.1  | [-3, 6] in /rails/yourapp/yourapp-code/app/views/editor/memberships/_form.html.haml
11:23:57 web.1  |    1  - debugger
11:23:57 web.1  | => 2  = simple_form_for membership, url: membership.path(:create_or_update) do |f|
11:23:57 web.1  |    3    = f.fields_for :member do |u_f|
11:23:57 web.1  |    4      = u_f.input :email, placeholder: "Enter their email address", label: 'Invite a new administrator'
11:23:57 web.1  |    5    = f.submit 'Add admin', class: 'btn btn-sm btn-success'    
11:23:57 web.1  | (rdb:1) membership
11:23:57 web.1  | #<MembershipDecorator:0x007fb03fee1168 @object=#<Membership id: nil, org_id: 1, member_id: nil, role: "basic", active: true, created_at: nil, updated_at: nil>, @context={}>
11:24:02 web.1  | (rdb:1) membership
11:24:02 web.1  | #<MembershipDecorator:0x007fb03fee1168 @object=#<Membership id: nil, org_id: 1, member_id: nil, role: "basic", active: true, created_at: nil, updated_at: nil>, @context={}>

Несмотря на отсутствие подсказки, отладчик все равно запустился.

На данный момент подсказки нет, и если вы что-нибудь наберете, это не появится на экране. Однако он будет выполнен, когда вы нажмете клавишу возврата, и вывод отобразится в терминале.

Итак, фокус в том, что отладчик запустился, и вы можете использовать его и видеть его вывод, вы просто не видите, что вы печатаете. Я понятия не имею, как это исправить, но, по крайней мере, вы можете продолжить отладку.

person Peter Nixey    schedule 25.03.2014