我有一个middleware for announcing my application on the local network app using Bonjour,但当从rake或通过控制台调用Rails时,它也会声明服务。
我想排除这些情况,只在Rails作为服务器运行时才使用Bonjour中间件。
中间件配置接受使用proc
在特定条件下排除中间件的过程
config.middleware.insert_before ActionDispatch::Static, Rack::SSL, :exclude => proc { |env|
env['HTTPS'] != 'on'
}
但是,我如何确定Rails是从CLI、控制台还是作为服务器调用的?
发布于 2012-11-23 17:15:39
使用pry查看Rails
模块会发现,可以像这样检测控制台调用:
Rails.const_defined? 'Console'
和类似如下的服务器调用:
Rails.const_defined? 'Server'
发布于 2014-12-05 01:57:28
非常有帮助。谢谢@crishoj。
我想更仔细地检查Console对象,了解我正在处理的另一个问题,并发现可以使用Rails::Console
达到Console常量,因此另一个检查选项是使用:
defined? Rails::Console
defined? Rails::Server
发布于 2018-04-01 20:59:22
无论是否使用Puma/Passenger这样的应用服务器,使用Rails5都可以通过以下三种方法来确定应用程序的运行方式:
# We are running in a CLI console
defined?(Rails::Console)
# We are running as a Rack application (including Rails)
caller.any?{|l| l =~ %r{/config.ru/}}
# We are running as a CLI console
caller.any?{|l| l =~ %r{/lib/rake/task.rb:\d+:in `execute'}}
https://stackoverflow.com/questions/13506690
复制相似问题