Ruby On Rails中铁路和引擎之间的差异3

Fab*_*bio 28 ruby-on-rails-plugins rails-engines ruby-on-rails-3 railtie

我读了一些关于这些论点的文件,但我不清楚它们是什么,它们之间有什么区别,如果其中一个符合我的需要.

我需要编写一个可插入其他应用程序的应用程序,并希望将其作为gem包含在其他应用程序中.基本上我需要一些模型,一个控制器和没有视图,加上一些初始化,支持来自托管应用程序和生成器的配置参数.

我是正确的吗?

我应该阅读什么才能理解如何做到这一点?

更新:

有很多细节AF一个很不错的文章,可以发现在这里.

实质上:

Railtie是Rails框架的核心,它提供了几个钩子来扩展Rails和/或修改初始化过程.

Rails :: Engine只不过是一个已经设置了一些初始化程序的Railtie.由于Rails :: Application和Rails :: Plugin是引擎,因此这里描述的相同配置可以在所有三个中使用.

joh*_*ley 7

Railtie可以做你所描述的,但是使用引擎可能更合适.引擎可以有自己的配置,也可以像Rails应用程序一样,因为它允许您以与常规Rails应用程序相同的方式将/ app目录包含在控制器,视图和模型中.

阅读此博客了解更多信息


lak*_*are 5

Rails::Engine继承所有功能Rails::Railtie并添加更多功能(Engine < Railtie源代码 [ 源代码中的文档都不错])。

基本上,railtie(==继承自您的类Rails::Railtie)为您提供了与Rails应用程序交互所需的全部功能。
发动机(==类,从继承Rails::Engine)是railtie +

  • 设置了一些初始化程序(在initializermethod的帮助下):使您的引擎的类似Rails应用程序的文件夹结构可加载到实际应用程序中,以便

    发动机会自动加载app/modelsapp/controllersapp/helpers到你真正的应用程序,从负载路线config/routes.rb,从装载的语言环境config/locales/*,并从负载任务lib/tasks/*

    您可以看到使用以下代码设置的初始值设定项:

    require 'rails/all'
    Rails::Railtie.initializers.map(&:name) #=> []  
    Rails::Engine.initializers.map(&:name)  #=> [:set_load_path, :set_autoload_paths, :add_routing_paths, :add_locales, :add_view_paths, :load_environment_config, :append_assets_path, :prepend_helpers_path, :load_config_initializers, :engines_blank_point]
    
    Run Code Online (Sandbox Code Playgroud)
  • 一些方便的方法,例如isolate_namespace