【问题标题】:How do you allow two Ruby apps to use the same model?如何让两个 Ruby 应用程序使用相同的模型?
【发布时间】:2013-02-11 00:54:48
【问题描述】:

我正在开发一个包含两个不同 Rails 应用程序的项目。一个是 Web 应用程序,另一个是 API 应用程序。他们都使用相同的数据库。他们如何或什么是使用相同模型和模式的正确方法?目前,模型文件似乎从一个应用程序复制到另一个应用程序,并且在检查差异时它们似乎严重不同步。

【问题讨论】:

  • 嗨。你在系统中使用git或其他代码版本吗?
  • Git。吉特。吉特。吉特。愚蠢的最低字符要求。
  • 他们需要是两个应用程序吗?还是应用的两个方面?
  • 我不确定。我是该应用程序的新手。它们在不同的端口和不同的子域上运行。我想在学习的同时尽可能少地改变。

标签: ruby-on-rails ruby ruby-on-rails-3.2


【解决方案1】:

想到几个选项:

  • Git 子模块。将您的模型存储在单独的存储库(或存储库)中,然后将其作为Git submodule 包含在每个应用程序中。这允许您在没有冗余的情况下重复使用它们,但您可能必须确保保持每个应用正在使用的版本同步。

  • 让它成为一个应用程序,具有两个不同的部分。也许您的 API 可以是一个简单的 Sinatra(或其他微框架)应用程序,并驻留在 Rails 应用程序中,然后安装到路径/子域。这可能是工作量最少、最简单的地方,但也可能是最混乱的。

  • 使用您自己的 API。你已经有一个 API,为什么不使用它呢?您的前端应用程序可以与之对话,而无需在其中包含任何模型逻辑。这还有一个很好的副作用,即确保您的 API 正常工作且功能齐全,因为您现在是它的消费者,而不仅仅是第三方。

你选择哪一个取决于你,虽然我碰巧更喜欢最后一个。虽然这可能需要更多的工作,但通过将业务逻辑置于外部(并使 MVC 违规更加困难,如果不是不可能的话),您最终可能会得到一个整体上更好的设计。

【讨论】:

  • 如果我使用第三个选项,网络应用程序将如何显示模型?视图不需要访问模型吗? Web 应用是 Rails,我不认为 API 应用是 Rails。
  • @Chloe 您将通过 API 获得所需的所有信息。视图不应该直接访问模型,它应该只从控制器获取信息,而控制器从 API 获取数据。它们是否都不是 Rails 也没关系(使用 API 的另一个好处:它们可以完全不同地实现)。
猜你喜欢
  • 2016-12-19
  • 2010-12-28
  • 2016-01-09
  • 2012-12-08
  • 2015-02-06
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
相关资源
最近更新 更多