我的Rails代码如何判断它是在服务器(例如瘦)还是在rspec中运行?

时间:2015-06-24 18:24:37

标签: ruby-on-rails rspec thin eventmachine faye

事实证明,瘦服务器非常特别关于为自己启动EventMachine反应器。这样会很好,除非在某些情况下我需要启动反应堆,因为这个过程并不是在内部运行。

所以简单的问题是我如何以编程方式确定我的Rails应用程序是由瘦服务器启动的?在那种情况下,我不会启动自己的EventMachine反应器,否则我必须。

1 个答案:

答案 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