【问题标题】:Differences between railties and engines in Ruby On Rails 3Ruby On Rails 3 中 Railties 和引擎之间的区别
【发布时间】:2011-06-27 19:23:41
【问题描述】:

我阅读了一些关于这些论点的文件,但我并不清楚它们是什么,它们之间有什么区别,以及其中一个是否符合我的需要。

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

我走对了吗?

我应该阅读什么来了解如何做到这一点?

更新:

可以在here找到一篇很好的文章,里面有很多细节。

基本上:

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

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

【问题讨论】:

标签: ruby-on-rails-3 ruby-on-rails-plugins rails-engines railtie


【解决方案1】:

Railtie 可能可以按照您的描述进行,但使用引擎可能更理想。该引擎可以有自己的配置,也可以像 Rails 应用程序一样工作,因为它允许您以与常规 Rails 应用程序相同的方式将 /app 目录包含控制器、视图和模型。

Read this blog for more info

【讨论】:

  • 非常好的指针,它确实解释了很多事情。此外,还有一个非常有趣的文档的链接,可以更好地解释差异。我会更新我的问题以添加该链接。
【解决方案2】:

Rails::Engine 继承了 Rails::Railtie 的所有功能并添加了更多功能(Engine < Railtie source code [源中的文档非常好])。

基本上,railtie(== 继承自 Rails::Railtie 的类)为您提供与 Rails 应用程序进程交互所需的一切。
engine(== 你的类继承自 Rails::Engine)是 railtie +

  • 一些初始化设置(在initializer方法的帮助下):使你的引擎的类似Rails应用的文件夹结构可以加载到真正的应用中,这样

    引擎会自动将app/modelsapp/controllersapp/helpers加载到你的真实应用中,从config/routes.rb加载路由,从config/locales/*加载语言环境,从@987654333加载任务@。

    您可以看到使用以下代码设置的初始化程序:

    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]
    
  • 一些方便的方法,例如isolate_namespace

【讨论】:

  • 你忘了mapRails::Engine.initializers.map(&:name)
猜你喜欢
  • 1970-01-01
  • 2018-06-29
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多