首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何确定Rails是从CLI、控制台还是作为服务器运行?

如何确定Rails是从CLI、控制台还是作为服务器运行?
EN

Stack Overflow用户
提问于 2012-11-22 14:01:41
回答 7查看 9.1K关注 0票数 38

我有一个middleware for announcing my application on the local network app using Bonjour,但当从rake或通过控制台调用Rails时,它也会声明服务。

我想排除这些情况,只在Rails作为服务器运行时才使用Bonjour中间件。

中间件配置接受使用proc在特定条件下排除中间件的过程

代码语言:javascript
复制
config.middleware.insert_before ActionDispatch::Static, Rack::SSL, :exclude => proc { |env| 
  env['HTTPS'] != 'on' 
}

但是,我如何确定Rails是从CLI、控制台还是作为服务器调用的?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-11-23 17:15:39

使用pry查看Rails模块会发现,可以像这样检测控制台调用:

代码语言:javascript
复制
Rails.const_defined? 'Console'

和类似如下的服务器调用:

代码语言:javascript
复制
Rails.const_defined? 'Server'
票数 48
EN

Stack Overflow用户

发布于 2014-12-05 01:57:28

非常有帮助。谢谢@crishoj。

我想更仔细地检查Console对象,了解我正在处理的另一个问题,并发现可以使用Rails::Console达到Console常量,因此另一个检查选项是使用:

代码语言:javascript
复制
defined? Rails::Console
defined? Rails::Server
票数 16
EN

Stack Overflow用户

发布于 2018-04-01 20:59:22

无论是否使用Puma/Passenger这样的应用服务器,使用Rails5都可以通过以下三种方法来确定应用程序的运行方式:

代码语言:javascript
复制
# 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'}}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13506690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档