У меня есть Rails 3.2 приложение работает на тонком сервере и в application.rb Я хочу начать EventMachine:Запуск EventMachine в новой нити после Rails загружается с помощью тонких
# application.rb
config.after_initialize do
if ENV['EM']
EM.run do
host = '0.0.0.0'
port = 3001
# hit Ctrl + C to stop
Signal.trap("INT") { EventMachine.stop }
Signal.trap("TERM") { EventMachine.stop }
EventMachine::start_server host, port, SomeModule
puts "EventMachine running on #{host}:#{port}. Ctrl + C to stop."
end
end
end
SomeModule имеет код, который зависит от Rails загружается. Вот почему я помещал это в блок after_initialize вместо инициализатора.
Теперь, когда я начинаю свой сервер (с rails s
) мой вывод выглядит отлично:
=> Booting Thin
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
EventMachine running on 0.0.0.0:3001. Ctrl + C to stop.
Но когда я иду на локальный в моем браузере я получаю 204 No Content
ответ.
Я могу думать о нескольких вещах, которые вызывают это, но не решение :)
- Может быть, я начинаю с EventMachine на том же потоке, блокируя приложение Rails. Но Тин должен справиться с этим?
- Может быть, я должен начать свой сервер по-другому, но как тогда?
Дополнительная информация о [EventMachine github wiki] (https://github.com/eventmachine/eventmachine/wiki/FAQ#does-em-work-with-other-ruby-threads-ru) – thinkOfaNumber