首页 分类 关于我
ruby
Nginx 配置示例 工程师的产品观 理理File/Dir/Pathname(一) TracePoint介绍 ruby中的return 如何动态改变某个class的祖先链 ObjectSpace介绍 Rails日志实现探索(3) Rails日志实现探索(2) Rails日志实现探索(1) Rails中的request rescue exception in ruby 设计模式之观察者模式 require 的故事 ruby中的编码 研究ruby的一些小技巧 Rails中间件 ruby对象的序列化 ActiveSupport宝藏之MessageVerifier 如何写rakefile Ruby on Rails 环境及准备 基于Rack的项目初始化
git
如何移除某次提交之前的版本历史 Git 不常用的好用的命令 Git高级技巧之忽略文件
database
Mysql数据库编码 从mongodb向mysql迁移数据
工具
搭建ipsec服务
linux
Linux 常用查看命令

Rails中间件

rails 常见中间件介绍

Rack中定义的中间件

Rack::Lock

线程锁, 保证 rails 代码单线程运行, 同时设置 env[‘rack.multithread’] = false, 你可以通过设置 config.allow_concurrency = true 来去掉该中间件

Rack::Runtime

统计运行时间, 放在 response 的 “X-Runtime” header 中

Rack::Sendfile

如果返回数据已经放在一个文件里边了(比如生成的 PDF), 则可以让 nginx 服务器直接从该文件读取,降低系统消耗

Rack::MethodOverride

支持用 POST 来模拟 PUT, DELETE, …, 可以在 POST 使用 _method 参数,也可以使用 HTTP 头 “HTTP_X_HTTP_METHOD_OVERRIDE”

Rails::Rack::Logger

比如 log/development.log 中的这一行 “Started GET “/” for 127.0.0.1 at Wed Sep 15 21:46:51 +0800 2010”

ActionDispatch 中定义的中间件

ActionDispatch::Static

静态文件(即 public/的文件)支持, 一般在生产环境下会禁用此功能

ActionDispatch::ShowExceptions

截获异常,把异常转换为 HTTP 错误号 (一般转为 500, 但一些特殊异常转到相应的错误号,比如 “ActionController::MethodNotAllowed” 会被转为 405, 同时显示对应的错误页面,对应开发环境,会显示异常的 backtrace, 对于生产环境,则会显示 public/500.html, 对于测试环境,该中间件会被禁用,直接把异常抛出

ActionDispatch::RemoteIp

解决服务器转发, 代理导致客户端真实 IP 丢失的问题,用户的真实IP放在 env[“action_dispatch.remote_ip”]

ActionDispatch::Callbacks

测试环境下用于检测源文件是否改变, 产品环境下作用不明 (TODO)

ActionDispatch::Cookies

cookie 支持

ActionDispatch::Session::CookieStore

session 支持,此处使用 cookie store

ActionDispatch::Flash

flash 支持, 参见 http://guides.rubyonrails.org/action_controller_overview.html#the-flash

ActionDispatch::ParamsParser

分析XML, JSON参数,放到 env[“action_dispatch.request.request_parameters”]

ActionDispatch::Head

把 HEAD 请求转为 GET 请求, 同时设置 env[“rack.methodoverride.original_method”] = “HEAD”

ActionDispatch::BestStandardsSupport

设置 HTTP 头: X-UA-Compatible

ProjectName::Application.routes

终于进入你的 rails 程序了, 开始路由, 同时开始使用 rails 的协议栈

© 2018 www.xinshengyin.com All rights reserved.

版权所有