Rails 3.1:引擎与可安装的应用程序
|
有人可以帮助我了解Rails Engine和可安装应用之间的区别吗?在Rails 3.1中,您可以使用\“ rails new plugin ___ \”命令创建一个。
rails plugin new forum --full # Engine
rails plugin new forum --mountable # Mountable App
您什么时候要使用另一个?我知道您可以将Engine打包为gem。可挂载应用程序不是这种情况吗?还有什么其他区别?
没有找到相关结果
已邀请:
5 个回复
澳绍能
中指定任何内容。在Gemfile中指定gem足以使父应用程序继承模型,路线等。引擎路线指定为:
没有模型,控制器等的命名空间。这些会立即 父应用程序可以访问。 可安装引擎 默认情况下,引擎的名称空间是隔离的:
使用可安装的引擎时,路由将被命名为名称空间,并且父应用程序可以在单个路由下捆绑此功能:
模型,控制器等与父应用程序隔离-尽管可以轻松共享助手。 这些是我发现的主要区别。也许还有其他?我已经在这里问过,但尚未收到答复。 我的印象是,由于完整的引擎不会将自身与父应用程序隔离,因此最好将其用作与父应用程序相邻的独立应用程序。我相信名称冲突可能会发生。 在您要避免名称冲突并将引擎捆绑在父应用程序中的特定路径下的情况下,可以使用可安装的引擎。例如,我正在构建我的第一个为客户服务设计的引擎。父应用程序可以在一条路径下捆绑其功能,例如:
如果我的假设不理想,请告诉我,我将解决此问题。我在这里干了一篇关于这个主题的小文章!
卧沫
: lib / my_full_engine / engine.rb:
lib / my_mountable_engine / engine.rb:
2)引擎的
文件将被命名为: 全引擎:
发动机:
3)控制器,助手,视图和资产的文件结构将被命名为: 创建应用程序/控制器/my_mountable_engine/application_controller.rb 创建app / helpers / my_mountable_engine / application_helper.rb 创建应用程序/邮件创建应用程序/模型 创建app / views / layouts / my_mountable_engine / application.html.erb 创建应用程序/资产/图像/ my_mountable_engine 创建应用程序/资产/样式表/my_mountable_engine/application.css 创建应用程序/资产/javascript/my_mountable_engine/application.js 创建config / routes.rb创建lib / my_mountable_engine.rb 创建lib / tasks / my_mountable_engine.rake 创建lib / my_mountable_engine / version.rb 创建lib / my_mountable_engine / engine.rb 说明
选项的用例似乎非常有限。就我个人而言,我想不出为什么要在不隔离名称空间的情况下将代码分离到引擎中的任何好理由-从本质上讲,这只会给您两个紧密耦合的应用程序,它们共享相同的文件结构以及所有冲突,并且随之而来的代码泄漏。 我看过的每篇文档都演示了
选项,实际上,当前的边指南强烈建议您包括
-这与使用
而不是ѭ7the相同。 最后是术语混淆:不幸的是,“ 19”显示了以下描述: [--full]#使用捆绑的Rails应用程序生成一个Rails引擎进行测试 [--mountable]#生成可安装的隔离应用程序 这给人的印象是,您实际上使用
创建一个“引擎”,并使用ѭ6else创建其他称为“可安装应用程序”的东西,而实际上它们都是引擎-一个命名空间而不是两个。这注定会引起混乱,因为希望创建引擎的用户可能会认为ѭ7是更相关的选项。 结论
=应用程序名称空间中的引擎。 (为什么?)
=带有其自己的名称空间的引擎。 (真棒) 参考文献 http://edgeguides.rubyonrails.org/engines.html http://api.rubyonrails.org/classes/Rails/Engine.html http://railscasts.com/episodes/277-mountable-engines https://github.com/rails/rails/pull/6499
篮肥炼皖
(对我而言)特别令人感兴趣的事实是,
和
悲帽慑彤电
刷遍派戳