Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 说到中间件,什么';config.ru和application.rb之间的区别是什么?_Ruby On Rails_Ruby On Rails 3_Rack_Middleware - Fatal编程技术网

Ruby on rails 说到中间件,什么';config.ru和application.rb之间的区别是什么?

Ruby on rails 说到中间件,什么';config.ru和application.rb之间的区别是什么?,ruby-on-rails,ruby-on-rails-3,rack,middleware,Ruby On Rails,Ruby On Rails 3,Rack,Middleware,我的理解正确吗?application.rb在整个Rails堆栈中运行中间件,而在config.ru中放置一些东西会抢占Rails堆栈 这意味着,例如,如果我说想要访问与Rails应用程序相同的会话和其他功能,我应该将中间件放在application.rb?然而,如果我所做的不一定依赖于Rails,它可以进入config.ru?我不是Rails/Rack专家,但我已经编写了一些Rack应用程序和中间件。所以我会尽我最大的努力 这里有两个独立的过程,初始化和运行时执行。在初始化过程中,默认情况下,

我的理解正确吗?
application.rb
在整个Rails堆栈中运行中间件,而在
config.ru
中放置一些东西会抢占Rails堆栈


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

我不是Rails/Rack专家,但我已经编写了一些Rack应用程序和中间件。所以我会尽我最大的努力

这里有两个独立的过程,初始化和运行时执行。在初始化过程中,默认情况下,任何机架兼容服务器都将以
config.ru
文件启动。在这种情况下,
runyourapp::Application
行之前的任何内容都无法访问
config.ru
文件中未明确包含的任何内容。所以
使用MyMiddleware一些东西:MyRailsModel.first
不起作用。如果你在“代码>应用程序。RB < /代码>或<代码>环境.RB < /代码>或<代码>配置文件/初始化器/*.Rb<代码>中,你将位于Rails初始化过程中的某个地方,可以访问已经初始化的任何东西,这可能是Rails核心中的任何东西。 但这只是初始化,所以它几乎只适用于要发送到中间件的任何配置参数。在运行期间,Rails已经完全初始化,您应该可以访问任何Rails类、模块等。但是您一定要运行
rake中间件
,查看堆栈,看看您自己的中间件与其他中间件和应用程序本身的关系。Rails不仅仅是实际的应用程序,它还向堆栈中注入了大量中间件。根据您的中间件相对于堆栈中其他中间件的位置,将影响请求的状态

特别是对于会话,最新的Rails版本使用机架会话,因此从机架访问会话应该不会有任何问题

我知道这可能不是你想要的那么简单或确定的答案,但希望它能有所帮助。机架和中间件一开始看起来很复杂,但当你最终把它们的工作原理放在一起时,你会发现幕后并没有太大的魔力,它最大的优点就是它的简单性,这就更容易理解了