莫粒 的多维空间


关于 | GitHub | Twitter

中间件——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其实是不是挺简单的~~?