gpt4 book ai didi

ruby-on-rails-3 - Rails 3.1 : Engine vs. 可安装的应用程序

转载 作者:行者123 更新时间:2023-12-03 04:36:29 25 4
gpt4 key购买 nike

有人可以帮助我理解 Rails 引擎和可安装应用程序之间的区别吗?在 Rails 3.1 中,您可以使用“rails new plugin ___”命令创建任一插件。

rails plugin new forum --full        # Engine
rails plugin new forum --mountable # Mountable App

您什么时候想使用其中一种而不是另一种?我知道您可以将引擎打包为 gem 。可安装应用程序不就是这样吗?还有哪些其他区别?

最佳答案

我注意到以下几点:

完整引擎

对于完整的引擎,父应用程序会继承引擎的路由。无需在 parent_app/config/routes.rb 中指定任何内容。在 Gemfile 中指定 gem 足以让父应用继承模型、路由等。引擎路由指定为:

# my_engine/config/routes.rb 
Rails.application.routes.draw do
# whatever
end

没有模型、 Controller 等的命名空间。这些是立即的可由父应用程序访问。

可安装引擎

引擎的命名空间默认是隔离的:

# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
end
end

使用可安装引擎,路由是命名空间的,父应用程序可以将此功能捆绑在单个路由下:

# my_engine/config/routes.rb 
MyEngine::Engine.routes.draw do
#whatever
end

# parent_app/config/routes.rb
ParentApp::Application.routes.draw do
mount MyEngine::Engine => "/engine", :as => "namespaced"
end

模型、 Controller 等与父应用程序隔离 - 尽管帮助程序可以轻松共享。

这些是我发现的主要差异。也许还有其他人?我已经问过here ,但尚未收到回复。

我的印象是,由于完整的引擎不会将自身与父应用程序隔离,因此最好将其用作与父应用程序相邻的独立应用程序。我相信可能会发生名称冲突。

当您想要避免名称冲突并将引擎捆绑在父应用程序中的一个特定路由下时,可以使用可安装引擎。例如,我正在致力于构建我的第一个专为客户服务而设计的引擎。父应用程序可以将其功能捆绑在单个路由下,例如:

mount Cornerstone::Engine => "/cornerstone", :as => "help" 

如果我的假设与我的假设相去甚远,请有人告诉我,我会修正这个回复。我写了一篇关于这个主题的小文章here .

关于ruby-on-rails-3 - Rails 3.1 : Engine vs. 可安装的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6118905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com