我的 Rails 引擎取决于我的父应用
My Rails Engine depends on my parent app
我想使用 Rails 引擎来模块化我当前的应用程序。我已经阅读了很多关于引擎的文章,包括 TaskRabbit's and Pothibo 的文章。
我有一个 Rails 应用程序,我希望父应用程序包含所有用户表。我想在应用程序中安装的引擎将依赖于包含所有用户模型的父应用程序。虽然我有这个工作,但我不确定这是否是不好的做法,因为如果没有父应用程序,我的引擎将无法 运行。这样做的主要想法是模块化代码。虽然 Pothibo 的文章建议在同一个应用程序中使用命名空间,但我喜欢完全管理单独代码库的自由。将不胜感激一些关于最佳实践的建议。
我认为 Rails 引擎有两个主要用例:
1) 在多个应用程序中重用功能。这是最常见的用例。
2) 提供将单体应用程序拆分为更小的应用程序(微服务)的迁移路径。例如,您可以首先将它们拆分到同一个 git 存储库中的引擎中,然后使用 gem 'xxx', path: 'engines/xxx'
挂载它们。然后进一步拆分为单独的代码存储库 and/or 主机作为单独的应用程序。
一般来说,我不建议使用第 2 种方法,除非应用程序足够大,可以将不同的引擎分配给不同的团队。当您在不同的引擎代码库或数据库表之间存在依赖关系时,缺点会变得复杂。优点是对 运行 的测试较少,拥有所有权的代码较少等
您可能会发现这些有趣的东西:
https://github.com/EPI-USE-Labs/activesupport-decorators
http://pivotallabs.com/leave-your-migrations-in-your-rails-engines/
我想使用 Rails 引擎来模块化我当前的应用程序。我已经阅读了很多关于引擎的文章,包括 TaskRabbit's and Pothibo 的文章。
我有一个 Rails 应用程序,我希望父应用程序包含所有用户表。我想在应用程序中安装的引擎将依赖于包含所有用户模型的父应用程序。虽然我有这个工作,但我不确定这是否是不好的做法,因为如果没有父应用程序,我的引擎将无法 运行。这样做的主要想法是模块化代码。虽然 Pothibo 的文章建议在同一个应用程序中使用命名空间,但我喜欢完全管理单独代码库的自由。将不胜感激一些关于最佳实践的建议。
我认为 Rails 引擎有两个主要用例:
1) 在多个应用程序中重用功能。这是最常见的用例。
2) 提供将单体应用程序拆分为更小的应用程序(微服务)的迁移路径。例如,您可以首先将它们拆分到同一个 git 存储库中的引擎中,然后使用 gem 'xxx', path: 'engines/xxx'
挂载它们。然后进一步拆分为单独的代码存储库 and/or 主机作为单独的应用程序。
一般来说,我不建议使用第 2 种方法,除非应用程序足够大,可以将不同的引擎分配给不同的团队。当您在不同的引擎代码库或数据库表之间存在依赖关系时,缺点会变得复杂。优点是对 运行 的测试较少,拥有所有权的代码较少等
您可能会发现这些有趣的东西:
https://github.com/EPI-USE-Labs/activesupport-decorators
http://pivotallabs.com/leave-your-migrations-in-your-rails-engines/