Ruby on Rails - 说到中间件,config.ru 和application.rb有什么区别?



我是否正确理解application.rb在整个 Rails 堆栈中运行中间件,同时放入一些东西config.ru抢占 Rails 堆栈?

这意味着,如果我说例如想要访问与我的 Rails 应用程序相同的会话和其他功能,我应该将我的中间件放在application.rb? 但是,如果我正在做的事情不一定依赖于 Rails,它可能会进入config.ru

我不是 Rails/Rack 专家,但我写了一些机架应用程序和中间件。所以我会尽力尝试这一点。

这里有两个独立的过程,初始化和运行时执行。在初始化过程中,默认情况下,任何与机架兼容的服务器都将从您的config.ru文件开始。在这种情况下,run YourApp::Application行之前的任何内容都无法访问config.ru文件中未明确包含的任何内容。所以use MyMiddleware something: MyRailsModel.first行不通。如果你在application.rbenvironment.rbconfig/initializers/*.rb中做同样的事情,你将处于Rails初始化过程的中间,并且可以访问任何已经初始化的内容,这可能是Rails核心中你需要的任何内容。

但这只是初始化,所以它几乎只适用于你要发送到中间件的任何配置参数。在运行时,Rails已经完全初始化,你应该可以访问任何Rails类、模块等。但是你绝对应该运行rake middleware并查看堆栈,看看你自己的中间件与其他中间件和应用程序本身的关系。Rails不仅仅是实际的应用程序,它还将大量中间件注入堆栈。根据中间件相对于堆栈中其他中间件的位置,将影响请求的状态。

具体到会话,最近的Rails版本使用Rack会话,因此从Rack访问会话应该不会遇到任何问题。

我知道这可能不像你想要的那么简单或明确的答案,但希望它有所帮助。机架和中间件起初看起来很复杂,但是当你最终把它是如何工作的碎片放在一起,并看到幕后没有太多的魔力,它最大的优势实际上是它的简单性,它变得更容易理解。

相关内容

  • 没有找到相关文章