【问题标题】:Running new rails app *and* legacy app on top of the same database在同一个数据库之上运行新的 rails 应用程序 * 和 * 旧版应用程序
【发布时间】:2013-05-09 03:26:55
【问题描述】:

我正在开展一个项目,我们正在构建几个新的 Rails 应用程序,这些应用程序旨在与需要使用相同数据库的旧应用程序一起运行。旧数据库使用 Oracle。

我认为理想的做法是干净地切换并且不在同一数据库上同时运行新旧应用程序,但在这种情况下根本不可能。旧版应用程序太大,运行着一个非常复杂的系统,这是业务的核心。目的是一次更换一点。

但要做到这一点,我们需要启动 Rails 应用程序,每个应用程序都处理应用程序的一部分,并与当前运行的旧应用程序共享数据库。

我环顾四周,找不到任何明确的 Rails 文档来描述我们可能遇到的问题——或者即使有可能。我知道 Heroku 现在支持运行多个指向单个数据库的 Rails 应用程序。我发现很多关于这样做的人的讨论,但没有真正确定潜在风险在哪里。

这可能吗?可能会出现哪些具体问题?

编辑:澄清一下,遗留应用程序不是基于 Rails 的。它基于一些完全不同的技术。

【问题讨论】:

    标签: ruby-on-rails ruby oracle


    【解决方案1】:

    虽然这是可能的,但您必须非常小心,尤其是当您有两个系统在同一个表上执行迁移时。

    理想情况下,一个应用程序“拥有”数据库并承担迁移各种表的责任,但可以将其拆分,以便一些表归一个应用程序所有,而另一些表归另一个应用程序所有。 schema_migrations 表应该能够独立跟踪这些。

    如果您必须在两个应用程序中对同一个表进行修改,您将遇到麻烦,因为无法确保一个修改先于另一个修改,迁移链是独立的。

    如果你小心避免这种事情,通常没问题。

    确保您有一个健壮的测试环境来模拟当两个应用程序同时运行时会发生什么。

    【讨论】:

    • 感谢您的回答。在这种情况下,旧应用程序将继续按原样运行,而新应用程序最终将全面采用旧应用程序的功能——此时旧应用程序将被淘汰。所以它们中的一个不能是唯一更新数据的;它们都必须创建、更新和删除相同类型的数据。
    • @tadman 所说的是对数据库架构/结构的修改。对实际数据的更改仍将遵循应用程序中设置的任何锁定/隔离级别。所以标准的 CRUD 东西不应该造成问题。
    • 就像@Doon 所说的那样,修改 data 是可以的。修改 schema,在其中添加和删除列等,如果您不小心,将导致复杂化。如果应用程序 A 假设控制了某些表的模式,而 B 假设控制了其余表,那么您会没事的。只需确保应用程序 A 没有将应用程序 B 无法理解的数据引入系统,或者应用程序 A 的验证与 B 发生冲突而导致更新问题。
    • 啊,是的,我明白了。我看错了。我同意架构迁移问题需要谨慎管理。
    猜你喜欢
    • 2019-07-15
    • 2018-10-06
    • 2019-10-31
    • 2017-05-30
    • 2021-06-19
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多