我想使用Rails引擎模块化我当前的应用程序。我已经阅读了很多关于引擎的文章,包括TaskRabbit和Pothibo的帖子。
我有一个Rails应用程序,我希望父应用程序包含所有用户表。我想在应用程序中安装的引擎将依赖于包含所有用户模型的父应用程序。虽然我有这个工作,但我不确定这是不好的做法,因为我的引擎将无法在没有父应用程序的情况下运行。这样做的主要思想是模块化代码。虽然Pothibo的文章建议在同一个应用程序中使用命名空间,但我喜欢完全管理单独代码库的自由。希望对最佳实践提出一些建议。
答案 0 :(得分:1)
在我看来,Rails引擎有两个主要用例:
1)在多个应用程序中重用功能。这是最常见的用例。
2)提供迁移路径,将单个应用程序拆分为较小的应用程序(微服务)。例如,您可以将它们拆分为同一git存储库中的引擎,然后使用gem 'xxx', path: 'engines/xxx'
进行装载。然后进一步拆分为单独的代码存储库和/或作为单独的应用程序托管。
通常我会建议不要2,除非应用程序足够大,可以将不同的引擎分配给不同的团队。当您在不同的引擎代码库或数据库表之间存在依赖关系时,缺点就是并发症。优点是诸如运行测试较少,获取所有权的代码较少等等。
你可能会发现这些有趣:
https://github.com/EPI-USE-Labs/activesupport-decorators
http://pivotallabs.com/leave-your-migrations-in-your-rails-engines/