ruby-on-rails - 如何将 Rack 中间件添加到 gem 的 Rails 应用程序

标签 ruby-on-rails ruby ruby-on-rails-3 rack rack-middleware

我正在开发一个事件处理程序来向远程 api 报告异常(类似于 newrelic 代理),如果不在 environment.rb 文件中执行,我找不到将我的中间件添加到 Rack 的方法。

我不想在 environment.rb 文件中执行此操作,因为我计划将它变成一个 gem,并且我想尽量减少安装过程。

这是我想添加到我的应用程序中的简单中间件:

#/lib/response_timer.rb
class ResponseTimer
  def initialize(app)
    @app = app
  end

  def call(env)
    #do something here
    @app.call(env)
  end
end

我能找到包含它的唯一方法是将其添加到我的环境配置中:

config.middleware.use "ResponseTimer"

我使用 Rails 才一年多,但这是我第一次接触 Rack 和中间件。

感谢任何建议!

最佳答案

Gems 可以通过提供 Railtie 来配置它们的主机应用程序.

例如,这是 BetterErrors gem 的简化版本这样做:

module BetterErrors
  class Railtie < Rails::Railtie
    initializer "better_errors.configure_rails_initialization" do
      Rails.application.middleware.use BetterErrors::Middleware
    end
  end
end

关于ruby-on-rails - 如何将 Rack 中间件添加到 gem 的 Rails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20630171/

相关文章:

where 查询中的 Ruby 格式 DateTime 参数

ruby-on-rails-3 - Rails 3 库直到需要才加载

ruby-on-rails - Rails i18n 字符串自动小写?

ruby-on-rails - 为什么ActiveRecord的:include do two queries?

ruby-on-rails - 如何确保记录不会被两个用户同时保存?

ruby - 使用 AXLSX gem 将多种样式应用于 Excel 电子表格中的单元格

ruby-on-rails-3 - Rails 3.2 - 禁用 Controller Action 的 CSRF 保护

ruby-on-rails - 使用 rspec 在 ruby​​ on rails 中测试 session 装饰器库

ruby-on-rails - 在 Rails 3 中初始化变量的位置

ruby-on-rails - Ruby on Rails - 不导入 SCSS