原文:http://api.rubyonrails.org/classes/Rails/Railtie.html

Railtie 是 Rails  框架的核心,提供几个钩子来扩展或修改 Rails 的启动过程。
Rails 的每个主要组件都是一个 Railtie,例如Action Mailer, Action Controller, Action View and Active Record。他们每一个都为自己的启动负责,这使得 Rails 本身不参与任何组件的钩子没,允许其他组件可以被用来提到 Rails 的默认设置。
 
开发一个 Rails 扩展插件不需要使用 Railtie,但是如果你需要在 Rails 启动前后和框架交互的时候,那么 Railtie 使需要的。
例如,当一个扩展插件做如下事情的时候,是需要 Railtie 的:
  • 创建启动器
  • 为应用程序配置 Rails 框架,比如创建一个生成器(generator)
  • 添加 config.* 到配置环境中。
  • 为 ActiveSupport::Notifications 创建 subscriber
  • 添加 rake 任务
创建你的 Railtie
为了使用 Railtie 扩展 Rails,需要在你扩展插件的命名空间中创建一个继承自  Rails::Railtie  的 Railtie 类,这个类必须在 Rails 的启动过程中被加载。
接下来的例子示范了一个扩展插件:
 
# lib/my_gem/railtie.rb
module MyGem
class Railtie < Rails::Railtie
end
end
# lib/my_gem.rb
require 'my_gem/railtie' if defined?(Rails)

   

启动器 Initializers
从你的 Railtie 中添加启动步骤到 Rails 的启动过程中,你只需要创建下面这个block:
class MyRailtie < Rails::Railtie
initializer "my_railtie.configure_rails_initialization" do
# some initialization behavior
end
end

  

如果指定参数,block 同样能接收 application object,在你需要使用一些 application 的配置,例如下面的 middleware :
 
class MyRailtie < Rails::Railtie
initializer "my_railtie.configure_rails_initialization" do |app|
app.middleware.use MyRailtie::Middleware
end
end

   

最后,如果你想匹配某个特性启动过程中每个特定的步骤,你同样可以传递  :before 和 :after 作为 initializer 的 参数。
 
配置
 
在你的 Railtie 类中,你可以得到一个包含配置的 config 对象,和所有的 railties 和 应用共享。
 
class MyRailtie < Rails::Railtie
# 定制 ORM
config.app_generators.orm :my_railtie_orm
# Add a to_prepare block which is executed once in production
# and before each request in development
config.to_prepare do
MyRailtie.setup!
end
end

   

加载 rake 任务和 生成器
如果你的 railtie 有 rake 任务,你可以通过 rake_tasks 方法告诉 Rails 去加载他们。
class MyRailtie < Rails::Railtie
rake_tasks do
load "path/to/my_railtie.tasks"
end
end
Rails 默认从你的加载路径加载生成器,如果你想把生成器放到另外一个地方,你可以在你的 Railtie 中指定一个block,此block会在正常生成器查找的时候加载。
class MyRailtie < Rails::Railtie
generators do
require "path/to/my_railtie_generator"
end
end
 Rails::Engine 只不过是一个已经设置了initializers的  Railtie 。因为 Rails::Application 是一个engine,这里描述的配置同样能应使用。
 
 

[翻译] Rails::Railtie的更多相关文章

  1. [Rails] 从 Request 到 Response(1)

    本文翻译自:Rails from Request to Response 系列:个人选择了自己感兴趣的部分进行翻译,需要阅读原文的同学请戳前面的链接. 第一部分 导言(Introduction) 服务 ...

  2. 如何用rake tasks 生成migration对应的sql

    how-to-use-rake-tasks-to-generate-migration-sql Rakefile文件里有load_tasks的方法 http://api.rubyonrails.org ...

  3. ruby rails_autolink不能加载的原因

    从rails 3.1.0开始,默认在ActionView::Helper::TextHelper中的auto_link方法已经被移除,放到了第三方的gem里:rails_autolink.遂想试一下其 ...

  4. CentOS6.5 安装gitlab以及gitolite迁移gitlab

    CentOS6.5 安装gitlab以及gitolite迁移gitlab gitlab 的安装使用以及数据结构 安装 环境: CentOS6.5 基于 nignx + unicorn 搭建的应用环境, ...

  5. jwt vs session 以rails 为例 (翻译部分)

    原文地址:https://pragmaticstudio.com/tutorials/rails-session-cookies-for-api-authentication 普通方式: 令牌为基础的 ...

  6. [ 翻译]ruby rails相关的常见服务器

    原文:http://stackoverflow.com/questions/4113299/ruby-on-rails-server-options     一,Apache vs Nginx     ...

  7. dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

    http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术 ...

  8. 尝试自己翻译了FreeCodeCamp的文章,技术方面多认识了几种技术,文章标题:Transparency in Action Free Code Camp is Now Open Source

    这是FreeCodeCamp其中一篇文章,趁着学习英文的时间,翻译这篇文章,其中讲到作者创建FCC过程,本文属于原创,第一次翻译,翻译还有诸多不足之处,请大家包含. 原文地址:https://medi ...

  9. .Net元编程【Metaprogramming in NET】 序-翻译

    最近在看这本书,比较实用.抽点时间把公开的部分内容简单的翻译了一下,下文是序部分. 书的具体地址为: http://www.amazon.cn/Metaprogramming-in-NET-Hazza ...

随机推荐

  1. 对C语言进行调试的最好方法是什么?

    要了解调试程序的最好方法,首先要分析一下调试过程的三个要素: 应该用什么工具调试一个程序? 用什么办法才能找出程序中的错误? 怎样才能从一开始就避免错误? 应该用什么工具调试一个程序? 有经验的程序员 ...

  2. Kconfig和Makefile的修改

    Kconfig文件的作用 内核源码树的目录下都有两个文件Kconfig(2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconf ...

  3. Android英文文档翻译系列(4)——PopupWindow

    public class PopupWindow extends Object //直接继承至Object java.lang.Object ↳ android.widget.PopupWindow  ...

  4. js插件---->ueditor编辑器的使用

    UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点.今天我们就开始学习一下.大致的效果图如下

  5. crossdomain.xml跨域配置文件的安全注意事项

    零.绪论: 对WEB中的FLASH确实了解不多,对程序中的跨域配置也了解不多,这是自己以前写的一篇笔记,到现在也还了解不深,勉强记下来罢了,备忘. 一.什么是crossdomain.xml?这是一个f ...

  6. TextureMerger1.6.6 二:Sprite Sheet的制作和使用

    本随笔记录下Sprite Sheet的制作和使用 Sprite Sheet主要用于将零碎的小图合并成一张整图.减少加载图片时http的请求次数. 1 打开TextureMerger,选择Sprite ...

  7. shell爬虫简易脚本(线程数可控)

    1.介绍 以机电之家网站为例 经过初步分析,机电之家的数据量较大,并且数据组织规则较为统一,适合以代码方式进行全量爬取. 企业列表URL统一为http://www.jdzj.com/yp_vlist_ ...

  8. 【面向对象】----【prototype&&__proto__&&实例化对象三者之间的关系】(四)-----【巷子】

    1.构造函数 a.什么是构造函数? 解释:通过关键字new 创建的函数叫做构造函数 作用:用来创建一个对象 废话少说直接上代码,首先我们还是创建一个构造函数人类 然后我们在创建两个实例,一个凡尘 一个 ...

  9. javascript飞机大战-----003创建英雄机

    /* 英雄机:因为英雄机只有一辆所以不需要用构造函数 */ var Hero = { //初始图片 self:null, //初始left left:0, //初始top top:0, //生命值 l ...

  10. windows 10激活

    1.安装Microsoft Toolkit 解压,安装 2.打开Microsoft Toolkit软件 点击下面红色框框 等到出现下面内容后,继续下一步 3.点击下面按钮 等待片刻后,出现下面结果,就 ...