中间件——Rack
Rails玩家如果不知道Rack的话,岂不是很尴尬?
什么是Rack中间件?
Rack中间件就像他的名字一样,他是一个“中间件”:中间层。
因为他处于HTTP请求的中间层:
Puma(或其他应用服务器) Rack Rails(Sinatra等)
Rails也好,Sinatra也好,他们都是基于Rack中间件的Rack应用程序。
Rack其实做的工作也很简单,将请求“转发”给Rack应用程序(Rails等),然后Rack应用程序返回body等数据给Rack,Rack再返回给应用服务器(Puma等),再发送给浏览器(或者给Nginx,再返回给浏览器)。
如何运行一个Rack应用?
rackup config.ru
rails中的config.ru中有这两行代码:
This file is used by Rack-based servers to start the application.
require ::File.expand_path(‘../config/environment’, FILE) run Rails.application
当然,如果你有自定义的中间件,你可能会在config.rb中的run之前加入
use HelloWorld
use会在每一次http请求时调用。
并且将环境变量 env传给use的HelloWorld类。
在HelloWord中,获取请求的数据,并且做一些中间层的工作,例如将清空session啊,修改body啊,修改headers啊等等
最后将env丢给Rails,就是HelloWorld中间件修改后的数据了~
Rack其实是不是挺简单的~~?