Techioz Blog

Rails が CLI、コンソール、またはサーバーとして実行されているかどうかを確認するにはどうすればよいですか?

概要

Bonjour を使用してローカル ネットワーク アプリ上でアプリケーションをアナウンスするためのミドルウェアがありますが、Rails が rake またはコンソール経由で呼び出されたときにもサービスをアナウンスします。

これらのケースを除外し、Rails がサーバーとして実行されている場合にのみ Bonjour ミドルウェアを使用したいと考えています。

ミドルウェア構成は、proc を使用して特定の条件下でミドルウェアを除外する proc を受け入れます。

config.middleware.insert_before ActionDispatch::Static, Rack::SSL, :exclude => proc { |env| 
  env['HTTPS'] != 'on' 
}

しかし、Rails が CLI、コンソール、またはサーバーから呼び出されたかどうかを確認するにはどうすればよいでしょうか?

解決策

pry を使用して Rails モジュールを覗いてみると、次のようにコンソール呼び出しを検出できることがわかります。

Rails.const_defined? 'Console'

そしてサーバー呼び出しは次のようになります。

Rails.const_defined? 'Server'