事实证明,瘦服务器非常特别关于为自己启动EventMachine反应器。这样会很好,除非在某些情况下我需要启动反应堆,因为这个过程并不是在内部运行。
所以简单的问题是我如何以编程方式确定我的Rails应用程序是由瘦服务器启动的?在那种情况下,我不会启动自己的EventMachine反应器,否则我必须。
答案 0 :(得分:1)
在完成Rails和Thin初始化之后,似乎确实没有从Application
渗透到Thin::Server
实例中。这似乎意味着我无法检查我的应用程序,以便看到服务器运行它。
所以我只是选择检查Thin::Server
是否已定义。因为我已经瘦了:
gem 'thin', require: false
如果应用程序是从瘦启动的话,我只会初始化Thin::Server
类。我已经检查了rails控制台,rake任务和delayed_jobs工作者,这个假设似乎已经存在。
所以,在我的application.rb中:
# Start Faye...
config.middleware.delete Rack::Lock
thin_server = defined?(Thin::Server)
config.after_initialize do |app|
Faye.logger = Rails.logger
unless thin_server
Faye.logger.debug "Ensure reactor running!"
Faye.ensure_reactor_running!
end
end
faye_params = {mount: '/faye', timeout: 25}
faye_params[:server] = 'thin' if thin_server
config.middleware.use FayeRails::Middleware, faye_params