gpt4 book ai didi

ruby-on-rails - Rails 中间件 : add middleware to config. ru 还是 config.middleware 数组?

转载 作者:行者123 更新时间:2023-12-04 06:16:59 30 4
gpt4 key购买 nike

我想澄清 config.ru 文件以指定 Rack 中间件,而不是使用 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 的中间件,这些中间件可以放置在该链中的任何位置?

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

最佳答案

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

我不太确定 app.config.middleware 数组的运行顺序与您在 config.ru 文件中放置的任何内容的顺序,但我希望 require ::File.expand_path('../config/environment', __FILE__)行需要在某处循环遍历中间件数组并调用 use 的文件将它们添加到 Rack 列表中。我会在 config.middleware 数组中指定中间件以确保它放置在您想要的位置。

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

关于ruby-on-rails - Rails 中间件 : add middleware to config. ru 还是 config.middleware 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12979411/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com