2011-11-07 53 views
1

我有兩個Rails應用程序的數據是相互依賴的。如果我需要在Django中輕鬆訪問另一個應用程序的模型或以其他方式共享這些模型,那麼這很簡單,因爲我只是將兩個應用程序都包含在我的項目中,並且能夠導入其他應用程序的模型。此時,我可以使用Django的ORM訪問另一個應用程序數據庫中的對象,並且它是一致的並且很棒。在Rails應用程序之間訪問數據的最佳實踐?

在Rails中,我得到了壓倒性的氛圍,要做到這一點的方法是在每個應用程序你想要的其他應用程序請求每一件事情創建RESTful API鉤子。看起來乾淨,足夠模塊化的,但它開始變得混亂,因爲我有一個情況如下:

  1. 製作GET請求應用程序A
  2. 應用程序A需要獲取來自應用B的數據,所以它是一個GET請求應用程序B上的API鉤子。
  3. 作爲B控制器中功能的一部分,它需要屬於A數據模型的一部分的數據,因此它向A請求數據。
  4. 步驟2-3正在連續發生

很明顯,這是造成可伸縮性的噩夢,在我們的例子中,由於這種競爭狀態,請求正在超時,新請求正在等待原始請求完成,但直到新請求完成纔會發生。我們可以啓動更多的Web服務器進程,但是我覺得在維護這兩個應用程序時,必須有一個更好的方法來實現這一點,而不會涉及到這些多餘的GET請求。

最終,我的問題是1)是否有更直接的方法來獲取另一個Rails應用程序的數據,而不是發出一個GET請求,或者我只是試圖用一種真正的優秀設計來殺死它? 2)如果我正在反對設計模式的穀物,這真的是一個很好的方法,是否有任何一般建議可以幫助我保持這些應用程序中的數據不依賴彼此,從而導致競爭像這樣的條件?我知道我可以通過該應用B就需要從A前面的信息(這只是一個領域,但現在可能以後會更多),但是,這是正確的

+1

如果應用B的人都需要從應用程序的數據來完成來自應用程序A的請求爲什麼不只是將該數據與對應用程序B的請求一起傳遞? –

回答

2

如果存在共享數據/模型的一個大的部分,將這些模型成寶石/插件並在這兩個應用中使用它們。儘管如此,保持每個應用程序的數據庫配置。

如果他們是緊密交織,我不是100%確信,一個或兩個應用程序正在做是正確的,但。

+0

我認爲使它成爲一個寶石是完美的人選。有問題的代碼是處理製作/跟蹤短鏈接的一個應用程序的模塊。重要的是,它現在需要成爲自己的模塊。謝謝! – Aaron

+0

@Aaron沒問題。幾周前我們做了同樣的事情,當時我們想把主管應用的管理部分分開。 –

相關問題