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