2013-05-08 48 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

相關問題