如何在 Rails 4.2 应用程序中添加中间件

Has*_*aut 5 ruby ruby-on-rails rack-middleware ruby-on-rails-4

我正在尝试学习Middlewares并练习如何在 Rails 应用程序中安装它。我已经关注了railscast

到目前为止,我已经实施了以下步骤:

1) 创建了一个Rails 4.2名为:Blog的新应用程序

2)在lib文件夹中添加了一个名为response_timer.rb.

class ResponseTimer
  def initialize(app)
    @app = app
  end

  def call(env)
    [200, {"Content-Type" => "text/html"}, "Hello World"]
  end
end
Run Code Online (Sandbox Code Playgroud)

3) 添加config.middleware.use "ResponseTimer"application.rb.

config.middleware.use "ResponseTimer"
Run Code Online (Sandbox Code Playgroud)

但是当我rake middleware在终端中执行命令时,它报告了这个错误:

rake aborted!
NameError: uninitialized constant ResponseTimer
Run Code Online (Sandbox Code Playgroud)

我也尝试添加config.middleware.use "ResponseTimer"development.rb,但再次面临同样的错误。

我在这里缺少什么?

请帮忙。

参考文章:http : //guides.rubyonrails.org/rails_on_rack.html

Ric*_*eck 5

中间件必须有一个附带的模块/类,并且需要在应用程序中加载才能被引用。在 Rails 中执行此操作的方法是autoloadinglib默认情况下不会自动加载文件):

#config/application.rb
config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.middleware.use "ResponseTimer"
Run Code Online (Sandbox Code Playgroud)

以上应该对你有用。

  • `autoload_paths` 不工作 :( 如果我做 `rails server` 那么未初始化的常量 Blog::Application::ResponseTimer (NameError)` 如果我做 `rake middleware` 那么`NameError: uninitialized constant Blog::Application::响应定时器` (2认同)