zoukankan      html  css  js  c++  java
  • [翻译] Rails::Railtie

    原文: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,这里描述的配置同样能应使用。
     
     
  • 相关阅读:
    Jquery动画第二部分
    Jquery动画第一部分
    Datalist增删改查——联系人管理
    Access增删改查 (持续更新中)
    Webform——Repeater多表联合显示
    Webform——内嵌word编辑器
    DataGridView导出Excel
    《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
    《Linux内核设计与实现》读书笔记(十二)- 内存管理
    《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理
  • 原文地址:https://www.cnblogs.com/fanxiaopeng/p/4455974.html
Copyright © 2011-2022 走看看