如何从gem中添加机架中间件到rails应用程序

时间:2013-12-17 09:17:13

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

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

我不想在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

我能找到包含它的唯一方法是将它添加到我的环境cofig:

config.middleware.use "ResponseTimer"

我已经使用rails工作了一年多,但这是我第一次使用机架和中间件。

任何建议表示赞赏!

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:-3)

http://rubylearning.com/blog/a-quick-introduction-to-rack/

对于机架的基本教程,明确的解释可以解决您的问题