Ruby on rails 我的Rails代码如何判断它是在服务器(例如thin)中运行还是在rspec中运行?
事实证明,瘦服务器对自己启动EventMachine反应器非常挑剔。那就好了,只是有些情况下我需要启动反应器,因为这个过程不是在稀薄的空气中进行的Ruby on rails 我的Rails代码如何判断它是在服务器(例如thin)中运行还是在rspec中运行?,ruby-on-rails,rspec,thin,eventmachine,faye,Ruby On Rails,Rspec,Thin,Eventmachine,Faye,事实证明,瘦服务器对自己启动EventMachine反应器非常挑剔。那就好了,只是有些情况下我需要启动反应器,因为这个过程不是在稀薄的空气中进行的 因此,一个简单的问题是,我如何通过编程确定我的Rails应用程序是由瘦服务器启动的?在这种情况下,我不会启动自己的EventMachine reactor,否则我必须启动。在经历了Rails和精简初始化之后,似乎确实没有从Thin::Server渗透到应用程序实例中。这似乎意味着我无法检查我的应用程序以查看运行它的服务器 所以我只是选择检查是否定义了
因此,一个简单的问题是,我如何通过编程确定我的Rails应用程序是由瘦服务器启动的?在这种情况下,我不会启动自己的EventMachine reactor,否则我必须启动。在经历了Rails和精简初始化之后,似乎确实没有从
Thin::Server
渗透到应用程序实例中。这似乎意味着我无法检查我的应用程序以查看运行它的服务器
所以我只是选择检查是否定义了Thin::Server
。因为我已经加载了:
gem 'thin', require: false
如果应用程序是从精简版启动的,我只需要初始化Thin::Server
类。我已经检查了rails控制台、rake任务和延迟工作,这个假设似乎成立
因此,在my 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
如果我不使用Faye作为中间件呢?我在ELB容器中的AWS平衡器后面启动它,所以我不能将它用作中间件