Metal - 加强的 Rack, 简陋的 Action Controller

本文介绍了Rails Metal和Rack的基础知识,解释了Metal作为Rack的子集如何提供更简洁的接口,以及如何通过减少额外功能来提高性能。文章还提供了具体的代码示例展示如何使用Metal。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

加强的 Rack:

意味着它符合 Rack 接口规范,可以直接使用它,创建出来的应用可以看做是一个 Rack application.

在 Rack 的基础上,它增加了 middleware_stack 的预处理。

和 Rack 一样,它的功能真的很有限。如你的项目做为 API 对外提供服务,不需要那么多功能,你可以尝试。

和 Rack 一样,相对来说它的性能比较高。如你的 Rails 项目对性能要求非常高,你可以尝试。

Rails Metal is a subset of Rack middleware 可以参考【Rack - Ruby Web server 接口】章节了解更多关于 Rack 的内容。

简陋的 Action Controller:

除了提供一个有效的 Rack 接口外,它几乎没有任何其它功能。

ActionController::Base 在它基础之上添加了多个类和模块,这使得功能得到增多,同时在性能上也会有相应损耗。如果你觉得这些功能不是必需的,或者性能的损耗是不可忍受的,你可以直接使用 Metal.

举个例子:

class HelloController < ActionController::Metal
  def index
    self.response_body = "Hello World!"
  end
end

在路由里添加相应代码,将请求转发到刚才的 HelloController#index 进行处理:

# config/routes.rb
get 'hello', to: HelloController.action(:index)

为了让 Route 能够很好转发,action 方法会返回一个有效的 Rack application.

主要做的事情

调用 middleware 进行预处理。

像 Rack application 一样小而完整的处理。

做出响应。

其它

一般模块名和同名目录都是有联系的,但 metal 不是,单指的是 metal.rb 这个文件,它和 metal/ 目录下的文件及内容没有关系。

  • 直接使用 Metal 时,要清楚自己在做什么。

另外,要清楚的知道各个组件有什么用,添加是为了什么,去掉又会有什么影响。

  • 为什么能够连续调用,原因:

你看每个 Rack Middleware 的 call 函数的最后一行,是不是都是 @app.call(env)
这说明,它在调用下一个 middleware 啊。

它们是一条封闭的链接,一直走下去,最后又会回到开头处,并且中间只要有一处断了,那整条链子就都 走不通!

顺序是:默认是按 use 的顺序走下去,但 use 时你也是可以指定的。

Note: @app 和 env 一直在变,但又一直没变。

用技术做兼职,找技术兼职,就上:
http://shixian.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值