Ruby on rails 在Rails应用程序之间访问数据的最佳实践?

Ruby on rails 在Rails应用程序之间访问数据的最佳实践?,ruby-on-rails,ruby,ruby-on-rails-3,rest,Ruby On Rails,Ruby,Ruby On Rails 3,Rest,我有两个Rails应用程序,它们的数据非常相互依赖。如果我需要在Django中轻松访问另一个应用程序的模型或以其他方式共享它们,那么这很简单,因为我只需要将这两个应用程序都包含在我的项目中,并能够导入另一个应用程序的模型。在这一点上,我可以使用Django的ORM访问另一个应用程序数据库中的对象,这是一致的,非常棒 在Rails中,我得到了一种压倒性的感觉,实现这一点的方法是在每个应用程序中为您希望其他应用程序请求的每件事情创建RESTfulAPI挂钩。看起来足够干净和模块化,但它开始变得混乱,

我有两个Rails应用程序,它们的数据非常相互依赖。如果我需要在Django中轻松访问另一个应用程序的模型或以其他方式共享它们,那么这很简单,因为我只需要将这两个应用程序都包含在我的项目中,并能够导入另一个应用程序的模型。在这一点上,我可以使用Django的ORM访问另一个应用程序数据库中的对象,这是一致的,非常棒

在Rails中,我得到了一种压倒性的感觉,实现这一点的方法是在每个应用程序中为您希望其他应用程序请求的每件事情创建RESTfulAPI挂钩。看起来足够干净和模块化,但它开始变得混乱,因为我的情况如下:

  • 向应用程序A发出GET请求
  • 应用程序A需要从应用程序B获取数据,因此它向应用程序B上的API挂钩发出GET请求
  • 作为B的控制器功能的一部分,它需要A的数据模型中的数据,因此它向A发出请求
  • 第2步到第3步接踵而至
  • 很明显,这造成了一场可伸缩性噩梦,在我们的例子中,请求超时是因为这种竞争条件,即新请求等待原始请求完成,但在新请求完成之前,它永远不会超时。我们可以启动更多的web服务器进程,但我觉得必须有一种更好的方法来做到这一点,即在维护这两个应用程序时,不需要发出这些多余的GET请求


    最终,我的问题是1)有没有比发出GET请求更直接的方法来获取另一个Rails应用程序的数据,或者我只是想用一种真正伟大的设计来扼杀它?2)如果我在与设计模式的颗粒作斗争,而这确实是一个很好的方法,你能提供什么一般性建议来帮助我避免这些应用程序中的数据相互依赖,从而导致这样的竞争条件?我意识到我可以预先传递应用程序B所需的信息(现在只是一个字段,但以后可能会更多),但这是对的吗?

    如果存在大量共享数据/模型,请将这些模型放入gem/插件中,并在两个应用程序中使用它们。但是,在IMO中,保持每个应用程序的DB配置


    如果它们紧密地交织在一起,我并不100%相信一个或两个应用程序都做得对。

    我还碰巧发现Mongoid支持多个数据库,这使我们能够完全实现我的目标:

    如果应用程序B需要应用程序A的数据来完成应用程序A的请求,为什么不将该数据与请求一起传递给应用程序B?我认为将其作为gem是一个完美的选择。所讨论的代码是一个应用程序的模块,用于处理创建/跟踪短链接。现在它需要成为自己的模块,这一点非常重要。谢谢@艾伦:没问题。几周前,我们刚刚做了同样的事情,当时我们想将主应用程序的管理部分分离出来。