Rails 4.2 应用中如何添加中间件
How to add middleware in Rails 4.2 application
我正在尝试学习 Middlewares
并一直在练习如何将其安装到 Rails 应用程序中。我关注了 railscast
到目前为止,我已经实施了这些步骤:
1) 创建了一个名为:Blog
的新 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) 在 application.rb
中添加了 config.middleware.use "ResponseTimer"
。
config.middleware.use "ResponseTimer"
但是当我在终端中输入命令 rake middleware
时,它报告了这个错误:
rake aborted!
NameError: uninitialized constant ResponseTimer
我也尝试在 development.rb
中添加 config.middleware.use "ResponseTimer"
但再次面临同样的错误。
我在这里错过了什么?
请帮忙。
我遵循了这个答案:
我之前尝试过,但之前可能漏掉了什么。
在appliation.rb
require 'rails/all'
require_relative '../lib/response_timer'
module Blog
class Application < Rails::Application
...
config.middleware.use ResponseTimer
end
end
中间件必须有一个附带的模块/class,并且需要在应用程序中加载它才能被引用。在 Rails 中执行此操作的方法是使用 autoloading
(lib
文件默认不会自动加载):
#config/application.rb
config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.middleware.use "ResponseTimer"
以上应该适合你。
我正在尝试学习 Middlewares
并一直在练习如何将其安装到 Rails 应用程序中。我关注了 railscast
到目前为止,我已经实施了这些步骤:
1) 创建了一个名为:Blog
的新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) 在 application.rb
中添加了 config.middleware.use "ResponseTimer"
。
config.middleware.use "ResponseTimer"
但是当我在终端中输入命令 rake middleware
时,它报告了这个错误:
rake aborted!
NameError: uninitialized constant ResponseTimer
我也尝试在 development.rb
中添加 config.middleware.use "ResponseTimer"
但再次面临同样的错误。
我在这里错过了什么?
请帮忙。
我遵循了这个答案:
我之前尝试过,但之前可能漏掉了什么。
在appliation.rb
require 'rails/all'
require_relative '../lib/response_timer'
module Blog
class Application < Rails::Application
...
config.middleware.use ResponseTimer
end
end
中间件必须有一个附带的模块/class,并且需要在应用程序中加载它才能被引用。在 Rails 中执行此操作的方法是使用 autoloading
(lib
文件默认不会自动加载):
#config/application.rb
config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.middleware.use "ResponseTimer"
以上应该适合你。