我有一个middleware for announcing my application on the local network app using Bonjour,但它也宣布了当Rails从rake或通过控制台调用时的服务.

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

中间件配置接受一个进程,在特定条件下使用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'

Ruby-on-rails相关问答推荐

使用FactoryBot测试ActiveStorage的RSpec请求规范

RSpec系统测试无法从工厂访问新创建的记录

在Ruby中按特定值合并时,将两个对象数组添加到一起

Heroku、Selenium、Chome和Chromedriver的复杂问题(抱歉,无法简单描述,请阅读详细信息)

Rails 模型 - 以 ID 作为自定义列的自定义主键

使用 Rspec 测试 Rails 3.1 可安装引擎

Rails 上的 build 和 new 有什么区别?

使用 rails 3.1.0 和 ubuntu 安装 Nokogiri 1.5.0 时出错

如何获取 Ruby on Rails 生成的表单元素 id 以供 JavaScript 参考?

Rails 4 查找没有子元素的父母

Redis 引发需要 NOAUTH 身份验证错误,但没有设置密码

Django 还是 Ruby-On-Rails?

如何一次显示一条 Ruby on Rails 表单验证错误消息?

如何在 Rails 中设置路由的默认格式?

反编译开发assets资源 管道

如何为 Rails 迁移定义布尔字段

RoR select_tag 默认值和选项

Rails 在 id 字段上重置种子的方法

在 El Capitan 上安装 Nokogiri (1.6.7) 时出错

如何获取 Rails 3.1 中assets资源 的绝对 URL?