У меня есть приложение Rails 3.2, работающее на тонком сервере, и в application.rb я хочу запустить EventMachine:
# 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. Но Тонкий должен справиться с этим правильно?
- Может быть, мне следует запустить свой сервер по-другому, но как тогда?