5

我想澄清 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 应用程序中间件开始之前对请求起作用?

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

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

4

1 回答 1

1

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

我不太确定 app.config.middleware 数组运行的顺序与您在 config.ru 文件中放置的任何内容的顺序,但我希望该require ::File.expand_path('../config/environment', __FILE__)行需要一个文件,该文件循环通过中间件数组并use调用所有这些都将它们添加到机架的列表中。我会在 config.middleware 数组中指定中间件,以确保将其放置在您想要的位置。

我认为“Rails-specific”和“rack”中间件之间也没有区别。这一切都在一个巨大的链条中运行,直到您使用 rails 应用程序。事实上,Rails 的很多功能都是中间件的形式(如果你在rake middleware命令行中输入,你可以看到整个列表)。

于 2013-05-12T22:41:22.627 回答