2013-05-08 56 views
1

我正在开发一个项目,在这个项目中我们正在构建几个新的rails应用程序,这些应用程序将与一个遗留应用程序一起运行,使用相同的数据库。遗留数据库使用Oracle。在同一个数据库上运行新的rails应用程序*和* legacy应用程序

我相信这将是理想的切换干净,并没有同时运行新的和旧的应用程序数据库,但在这种情况下,它根本不可能。传统应用程序太大,运行一个非常复杂的系统,这是业务的核心。目的是一次取代它。

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

我环顾四周,一直没能找到任何明确的轨道文档描述我们可能遇到什么问题 - 或者即使这是可能的。我知道Heroku现在支持运行指向单个数据库的多个rails应用程序。我发现很多人都在讨论这个问题,但没有什么能确定潜在风险在哪里。

这可能吗?哪些具体问题可能发生?

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

回答

1

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

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

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

如果你小心避免这种事情,通常很好。

确保您有一个强大的测试环境来模拟两个应用程序串联运行时发生的情况。

+0

感谢您的回答。在这种情况下,遗留应用程序将继续按原样运行,而新应用程序最终将全部使用旧应用程序的功能 - 此时旧应用程序将会停用。所以他们中的一个不能成为唯一一个更新数据的人;他们都必须创建,更新和删除相同类型的数据。 – 2013-05-08 19:29:12

+0

@tadman正在讨论的是修改数据库的模式/结构。对实际数据的更改仍将遵循应用程序中设置的任何锁定/隔离级别。所以标准的CRUD内容不应该成为问题。 – Doon 2013-05-08 19:32:42

+0

像@Doon所说的那样,修改* data *是可以的。如果你不小心,修改* schema *,添加和删除列等的位置会导致复杂性。如果应用程序A对某些表的模式进行控制,并且B控制剩下的部分,则可以。只要确保应用程序A不将数据引入到应用程序B无法理解的系统中,或者应用程序A的验证与B相冲突导致更新问题。 – tadman 2013-05-08 19:35:54

相关问题