2008-10-07 57 views
8

我有一段記憶,那些已經使用Ruby on Rails的人們說話,然後在他們達到極限時放棄它,或者發現它最終過於僵化。我忘記了細節,但它可能與使用多個數據庫有關。紅寶石在軌道上的限制是什麼?

所以我想知道的是Ruby on Rails以外的特性/需求,或者至少需要這樣的扭曲,以至於使用另一個更靈活的框架更好,即使您可能不得不丟失一些優雅或寫入額外的樣板代碼。

+0

聽起來對我來說是主觀的。 – 2008-10-07 20:48:02

回答

12

Rails(不是紅寶石本身)很自豪能成爲「意見軟件」。

這意味着在實踐中,軌道的作者有一定的目標受衆(基本上),並專門針對軌道。如果該目標受衆不需要X功能,則不會添加該功能。

關閉我的頭頂,事情軌明確不支持的人可能關心:

  1. 在數據庫外鍵
  2. 連接到多個數據庫的一次
  3. SOAP Web服務(因爲鐵軌2。0)
  4. 連接到多個數據庫服務器一次

這就是說,它是很容易用插件擴展軌,並有所有上述功能添加到Rails插件,很多更多,所以我不會將這些視爲限制。

唯一的另一個警告是圍繞使用MVC創建CRUD Web應用程序的想法圍繞構建了。如果你正在嘗試做一些不是CRUD的web應用(比如Twitter,它實際上是一個消息系統,或者如果你瘋了,想要使用ASP.NET webforms這樣的模型),那麼你也會遇到問題。在這種情況下,你最好不要使用導軌,因爲你本質上是試圖用自行車零件來建造一艘船。

在所有可能的情況下,你遇到的問題不能僅僅通過一個快速插件或一天或兩個編碼來解決,這些都是潛在的C Ruby運行時(內存泄漏,綠色線程,垃圾性能等)。

+0

並且考慮到我們有超過1個Ruby運行時可供選擇的邊緣,即使其中一些問題正在變得沒有實際意義。 – 2008-10-08 02:12:24

5

Ruby on Rails不支持開箱即用的兩階段提交,如果您的數據庫支持的應用程序需要保證即時一致性,並且您需要使用兩個或多個數據庫模式,則可能需要這樣做。

對於很多Web應用程序,我敢說這不是一個常見的用例。人們可以很好地支持與兩個或更多數據庫的最終一致性。或者可以支持與一個數據庫模式的即時一致性。如果您的應用程序必須支持mondo數量的交易(前提是技術術語:),那麼前一種情況是一個很大的問題。後一種情況更爲典型,Rails的確很好。

坦率地說,我不會擔心在使用Ruby on Rails(或任何框架)之前,你會遇到真正的可伸縮性問題。建立一個殺手 app ,然後擔心可擴展性。我正在考慮Rails會有一個難以支持的事情,因爲它可能需要在其架構上進行根本性的轉變。我會很慷慨,並且包含一些屬於寶石/插件生態系統的東西,例如外鍵執行或SOAP服務。

通過兩階段提交,我的意思是嘗試在一個事務性上下文中對物理上不同的服務器進行兩次提交。

兩階段提交的用例#1:您已將數據庫集羣,以便擁有2個或更多數據庫服務器,並且您的模式分佈在兩臺服務器上。您可能希望提交給兩臺服務器,因爲您希望允許ActiveRecord認爲可以在不同服務器之間穿越「外鍵映射」。

兩階段提交的用例#2:您試圖實現一個消息傳遞解決方案(對不起,我是J2EE開發人員白天)。消息生產者向消息傳遞代理(一個服務器)和數據庫(一個不同的服務器)提交。

+0

雖然這在技術上是正確的,但我相信你可以使用db中間件來實現兩階段提交,或者只是使用一個支持它的數據庫,它會正常工作。我不確定我會把它稱爲限制,也許只是不是框架的優先事項。 – 2008-10-07 22:06:41

+0

這個例子中的2階段提交是什麼意思? – 2008-10-08 01:39:45

0

獵戶座的答案是正確的。 AR/Rails幾乎沒有硬性限制:部署到Windows,不常使用的AR連接器,例如, Firebird),但即使是他提到的事情,包括多個數據庫和數據庫服務器,也有解決遺留,分片和其他原因的寶石和插件。

真正的侷限性是如何耗費時間去掌握所有rails開發者的工作,研究特定問題,給定多少博客,以及有多少郵件列表量。

1

我覺得有一個更大的「元問題」在這裏,也可以回答,那就是「當是確定依靠外部庫,加快發展的時間?」

第三方庫往往很好,可以大大縮短開發時間,但是存在一個主要問題,Joel Spolsky稱之爲「漏洞抽象法」。如果你在Google上查看,他的帖子將首先出現。從本質上講,這意味着開發時間的折衷意味着你不知道封面上發生了什麼。所以當發生什麼事情時,你完全陷入困境,調試方法非常有限。這也意味着,如果您碰到了RAILS中僅僅不受支持的功能之一,那麼您確實需要這些功能,除非您自己編寫功能,否則就沒有下一步了,如果幸運的話。許多圖書館可能難以做到這一點。

這個問題我們在我的開發店被燒得不好。我們的解決方案在正常負載下運行良好,但是我們發現我們使用的第三方訂閱庫根本無法承受我們的網站開始獲得大量併發用戶後遇到的那種負載。這使我們陷入了一個非常困難的地方;基本上我們必須自己重寫整個訂閱服務,並考慮性能。這意味着我們一直在浪費使用圖書館的時間。

第三方庫對於中小型應用程序非常適用;他們可以大大縮短開發時間並隱藏在開發早期不需要處理的複雜性。然而,最終他們會趕上你,你可能不得不重寫或重新設計你的解決方案,以通過「泄漏absctractions的法律」

1

Ruby沒有像ASP中的IsPostBack功能。網