我有一个在瘦服务器上运行的 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.
但是当我在浏览器中访问 localhost 时,我得到了204 No Content
响应。
我可以想到导致这种情况的几件事,但不是解决方案:)
- 也许我在阻止 Rails 应用程序的同一线程上启动 EventMachine。但是 Thin 应该处理好这个问题吗?
- 也许我应该以不同的方式启动我的服务器,但那怎么办?