Ruby on rails 大型Rails套件体系结构:将三个应用程序合并到一个容器应用程序中

Ruby on rails 大型Rails套件体系结构:将三个应用程序合并到一个容器应用程序中,ruby-on-rails,ruby,heroku,architecture,Ruby On Rails,Ruby,Heroku,Architecture,我们的Rails套件由三个独立的Rails应用程序组成: JSON API Rails应用程序 管理仪表板Rails应用程序 共享数据模型Rails引擎 API和管理仪表板都需要在其文件中包含共享数据模型引擎。所有模型和自定义类都存储在引擎中,两个应用程序都大量使用共享组件。API位于一台Heroku服务器上,管理仪表板位于另一台单独的Heroku服务器上—两个单独的Heroku应用程序。每个人都使用各自的Postgres数据库。这三款应用都有自己的GIT回购协议 API数据库存储与我们的公共用

我们的Rails套件由三个独立的Rails应用程序组成:

JSON API Rails应用程序 管理仪表板Rails应用程序 共享数据模型Rails引擎 API和管理仪表板都需要在其文件中包含共享数据模型引擎。所有模型和自定义类都存储在引擎中,两个应用程序都大量使用共享组件。API位于一台Heroku服务器上,管理仪表板位于另一台单独的Heroku服务器上—两个单独的Heroku应用程序。每个人都使用各自的Postgres数据库。这三款应用都有自己的GIT回购协议

API数据库存储与我们的公共用户相关的信息,而管理员数据库存储的大部分统计信息只供管理员使用

设置的一个警告是,AdminDashboard应用程序可以直接访问API数据库,反之亦然。我知道这是一种不好的做法,似乎没有什么意义,但这是有原因的,主要是因为管理仪表板需要访问某些API表的所有记录,而使用自定义API进行在线通信是不可行的。API到管理员数据库的通信也存在类似的原因

此设置适用于我们的目的,没有任何内容被破坏,资源得到有效分配。然而,由于开发过程缓慢且不舒适,生产力开始受到影响。例如:需要对API进行更改。共享模型引擎可能需要更改,因此两个repo中都需要一个功能分支。在提交和推送之后,管理仪表板现在包含旧版本的模型引擎,并且落后于一个补丁版本。问题在于试图协调所有三个Rails应用程序,而只有一个应用程序需要更改。另一个问题是迁移。由于模型引擎包含两个不同的数据库连接,我必须在模型引擎中创建一次迁移,然后在适当的应用程序API或管理员中再次创建迁移

我的理想设置是一个大型Rails容器应用程序,其中包含独立的引擎。单独的引擎将是:API、管理、模型。此外,我开始认为只使用一个数据库可能会使事情变得更简单。我还希望将API保存在自己的服务器实例上,将管理员保存在单独的服务器上。这是因为API是面向公众的,它与一个公共iOS应用程序进行通信,而Admin主要用作CMS和报告引擎

我希望从管理类似Rails/Heroku架构的经验中获得解决方案和建议。具体问题:

我是否应该尝试将三个Rails应用程序合并到一个容器中 应用程序并使用引擎方法? 我应该尝试将两者结合起来吗 将数据库合并为一个数据库? 有可能有一个导轨吗 容器应用程序,并为不同的引擎分配不同的服务器? 如果我把所有的应用程序分开,它们是不是更容易、更安全 每天实施新功能和修复的高效方式?