38

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

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

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

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

しかし、RailsがCLIから呼び出されたのか、コンソールから呼び出されたのか、サーバーとして呼び出されたのかを判断するにはどうすればよいですか?

4

8 に答える 8

48

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

Rails.const_defined? 'Console'

そして、次のようなサーバー呼び出し:

Rails.const_defined? 'Server'
于 2012-11-23T09:15:39.120 に答える
1

私たちのプロジェクトでは、boot.rbでコンソール モードを検出する必要がありました。

in_console = (ARGV & ['c', 'console']).any?

誰にでもできるソリューションではありませんが、私たちのユースケースには十分です。

于 2018-12-03T03:59:32.320 に答える