5

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

到目前为止,我已经实施了这些步骤:

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

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

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

config.middleware.use "ResponseTimer"

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

rake aborted!
NameError: uninitialized constant ResponseTimer

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

我在这里想念什么?

请帮忙。

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

4

2 回答 2

5

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

#config/application.rb
config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.middleware.use "ResponseTimer"

以上应该对你有用。

于 2016-01-19T09:03:03.887 回答
-2

我遵循了这个答案:https ://stackoverflow.com/a/24122424

我之前尝试过,但之前可能错过了一些东西。

appliation.rb

require 'rails/all'
require_relative '../lib/response_timer'
module Blog
 class Application < Rails::Application
  ...
  config.middleware.use ResponseTimer
 end
end
于 2016-01-19T08:47:17.097 回答