Rails中间件:将中间件添加到config.ru或config.middleware数组?

时间:2012-10-19 17:30:30

标签: ruby-on-rails rack

我想澄清config.ru文件以指定机架中间件而不是使用config.middleware数组。

如果config.ru通常如下所示:

require ::File.expand_path('../config/environment',  __FILE__)
use Rack::Deflater
run TestApp::Application

我是否正确地说当我运行TestApp :: Application时,我进入Rails内部中间件?也就是说,它是否开始在config.middleware中定义的中间件链?

因此,在rails应用程序之外指定中间件的有效用法是使用rails本身外部的请求(或响应)来做事情吗?那么在这个示例中,Deflator会在rails app中间件开始之前对请求进行操作吗?

使用config.middelware的有效用法是指定更多可以放置在该链中任何位置的特定于rails的中间件吗?

此外,当机架应用程序开始时,应用程序是什么? (这是传递给机架应用程序的初始化?)。我一直认为应用程序是rails应用程序本身,但似乎rails应用程序只是链中的另一个middelware。

1 个答案:

答案 0 :(得分:1)

rails应用程序不是Rails中间件,而是Rack应用程序。它是中间件链的底部(用run代替use)。

我不太确定app.config.middleware数组的运行顺序与你在config.ru文件中输入的顺序有关,但我希望require ::File.expand_path('../config/environment', __FILE__)行需要一个文件循环遍历中间件数组并在所有这些数组上调用use以将它们添加到机架列表中。我在config.middleware数组中指定了中间件,以确保它被放置在你想要的位置。

我认为“Rails特定”和“机架”中间件之间没有区别。这一切都在一个巨型链中运行,直到你点击rails应用程序。实际上,许多Rails的功能都是中间件的形式(如果在命令行中键入rake middleware,则可以看到整个列表。)

相关问题