美文网首页
Ruby Engine 入门

Ruby Engine 入门

作者: spaceship | 来源:发表于2016-12-23 14:30 被阅读130次

    1 引擎是什么?

    引擎可以被认为是一个可以为其宿主提供函数功能的中间件。一个Rails应用可以被看作一个"超级给力"的引擎,因为Rails::Application类是继承自 Rails::Engine的。

    从某种意义上说,引擎和Rails应用几乎可以说是双胞胎,差别很小。通过本章节的学习,你会发现引擎和Rails应用的结构几乎是一样的。引擎和插件也是近亲,拥有相同的lib目录结构,并且都是使用rails plugin new命令生成。不同之处在于,一个引擎对于Rails来说是一个"发育完全的插件"(使用命令行生成引擎时会加--full选项)。在这里我们将使用几乎包含--full选项所有特性的--mountable来代替。本章节中"发育完全的插件"和引擎是等价的。一个引擎可以是一个插件,但一个插件不能被看作是引擎。

    我们将创建一个叫"blorgh"的引擎。这个引擎将为其宿主提供添加主题和主题评论等功能。刚出生的"blorgh"引擎也许会显得孤单,不过用不了多久,我们将看到她和自己的小伙伴一起愉快的聊天。引擎也可以离开他的应用宿主独立存在。这意味着一个应用可以通过一个路径助手获得一个articles_path方法,使用引擎也可以生成一个名为articles_path的方法,而且两者不会冲突。同理,控制器,模型,数据库表名都是属于不同命名空间的。接下来我们来讨论该如何实现。你心里须清楚Rails应用是老大,引擎是老大的小弟。一个Rails应用在他的地盘里面是老大,引擎的作用只是锦上添花。可以看看下面的一些优秀引擎项目,比如Devise ,一个为其宿主应用提供权限认证功能的引擎;Forem, 一个提供论坛功能的引擎;Spree,一个提供电子商务平台功能的引擎。RefineryCMS, 一个 CMS 引擎 。

    最后,大部分引擎开发工作离不开James Adam,Piotr Sarnacki 等Rails核心开发成员,以及很多默默无闻付出的人们。如果你见到他们,别忘了向他们致谢!

    2 生成一个引擎

    为了生成一个引擎,你必须将生成插件命令和适当的选项配合使用。比如你要生成"blorgh"应用 ,你需要一个"mountable"引擎。那么在命令行终端你就要敲下如下代码:

     $ bin/rails plugin new blorgh --mountable
    

    生成插件命令相关的帮助信息可以敲下面代码得到:

    $ bin/rails plugin --help
    

    --mountable
    选项告诉生成器你想创建一个"mountable",并且命名空间独立的引擎。如果你用选项--full
    的话,生成器几乎会做一样的操作。--full
    选项告诉生成器你想创建一个引擎,包含如下结构:

    • 一个 app目录树
    • 一个 config/routes.rb文件:
     Rails.application.routes.draw do 
     end
    
    • 一个lib/blorgh/engine.rb文件,以及在一个标准的Rails应用文件目录的config/application.rb中的如下声明:
    module Blorgh
        class Engine < ::Rails::Engine
        end
    end
    

    --mountable选项会比--full选项多做的事情有:

    • 生成若干资源文件(application.js and application.css)
    • 添加一个命名空间为ApplicationController的子集
    • 添加一个命名空间为ApplicationHelper的子集
    • 添加 一个引擎的布局视图模版
    • 在config/routes.rb中声明独立的命名空间 ;
    Blorgh::Engine.routes.draw do
    end
    

    在lib/blorgh/engine.rb中声明独立的命名空间:

    module Blorgh
      class Engine < ::Rails::Engine
        isolate_namespace Blorgh
      end
    end
    

    除此之外,--mountable选项告诉生成器在引擎内部的 test/dummy文件夹中创建一个简单应用,在test/dummy/config/routes.rb中添加简单应用的路径。

    mount Blorgh::Engine, at: "blorgh"
    

    2.1 引擎探秘

    未完待续

    资料来源:http://guides.ruby-china.org/

    相关文章

      网友评论

          本文标题:Ruby Engine 入门

          本文链接:https://www.haomeiwen.com/subject/cqjkvttx.html