2010-08-29 72 views
20

對於我的下一個Web應用程序,我在討論是否使用Rails 3.x或Sinatra。Rails 3 vs Sinatra

我想使用服務器提供用戶身份驗證,應用程序觸發的電子郵件,一個相當複雜的數據模型(後面的ActiveRecord),並與Web客戶端一個JSON數據接口。客戶端將使用靜態HTML,靜態CSS,Javascript/jQuery將JSON數據呈現到視圖中。呈現視圖的「策略」將由Javascript代碼和一些JSON數據驅動。我不打算使用任何動態視圖技術,如ERB,HAML或RJS。

用Sinatra或Rails 3.x會更好嗎?

在做出這個決定之前,我還有其他任何問題嗎?

回答

26

你的數據模型是相當複雜的,所以我想,你的應用程序將需要處理的業務規則和交互可能性顯著數量。

Sinatra用於處理輕量級軟件體系結構。如果您選擇Sinatra,您可能會遇到需要自己處理的設計和組織問題。 Rails實現了MVC模式,可以通過提供大量有用的機制來幫助您組織代碼。

你仍然可以建立與西納特拉「全棧」的Web應用程序,但你必須自己做了很多特別是如果的功能,你將提供的金額爲高(或將增長)。我認爲Rails在更大的體系結構中更適合自己。

PS:ActiveRecord的可無論是在西納特拉和Rails。

+0

鑑於我會在任何情況下使用ActiveRecord,爲什麼它有所作爲?畢竟沒有ActiveRecord讓你把商業規則放在模型層? Rails完整的MVC堆棧會爲您提供Sinatra沒有的業務規則嗎? – 2010-08-30 10:38:02

+2

例如,您通常需要在模型圖層中使用驗證規則(不是由AR提供的)。 但是更重要的一點是:在Rails中,你將自己置於現有的結構中。您遵循的約定和模式可以確保您的應用易於維護並且可以很好地擴展。 Sinatra只能幫助您進行路由和調度。在大型應用程序中,您需要的不僅僅是這些:您需要分離關注點和構造模式。當然你可以在Sinatra上編寫一個框架來確保這一點,但是這需要時間並且會有錯誤(就像在每個程序中一樣)。 (你也可以使用Padrino) – Antoine 2010-08-30 12:36:32

1

我有差不多的任務來完成現有的Rails應用程序,現在需要對外部設備(iPhone和Android應用程序)一個JSON接口。 強烈建議使用sinatra-activerecord,以便您可以將所有模型包含在您的sinatra應用程序中。這樣你就不必重寫你的業務邏輯。

裝入現有的模型在你的末日應用程序如下: 集:數據庫,URI.encode(「#{db_settings [ '銜接']}://#{db_settings [ '用戶名']} @#{db_settings ['host']} /#{db_settings ['database']}「) require'./data/models/user.rb'

而db_settings正在從database.yml加載它的設置(與rails的格式相同)爲此使用yaml_db gem;)。這樣,您的sinatra應用程序就可以重新使用所有模型,甚至可以從rails應用程序中重新使用配置文件。

+0

如果你打算在Sinatra中加載你現有的Rails模型,爲什麼要麻煩?爲什麼不直接使用Rails?通過與Sinatra一起獲得什麼? – kakubei 2012-10-02 08:46:46

6

西納特拉將是一個非常好的選擇,我覺得它會比鐵路主要是因爲一個原因。 這與什麼其他用戶寫道鏈接「你遵循慣例和模式,確保您的應用程序將是易於維護,並很好地擴展。

幾年前,我們在鐵軌開發一個相當大的應用程序。我們所有的開發人員必須做一個完整的重寫,因爲鐵軌核心(讀37信號)不關心使他們的新版本向後兼容。在每一次更新代碼將打破。

因此編碼在Rails中不會確保可維護性或可擴展性。恰恰相反。

事實上,Sinatra的可擴展性會更好,因爲它更輕量級,而且無論如何都可以使用乘客進行部署。 Sinatra社區沒有炒作和非常有幫助。沒有什麼靈丹妙藥,對於相同程度的Rails來說,這是一個很大的自我。而這個確實是的問題,因爲Rails議程可能與您的議程不同,您可能會很快重寫代碼。 O'Reilly有一本關於Sinatra的新書,我認爲它值得一看,因爲它充滿了關於可以做什麼和如何做的例子和想法。

1

爲什麼你會用Rails做任何事情?你需要模板生成器嗎?

用Sinatra或者純粹的Rack寫一個應用程序就像在Rails中一樣簡單,而且你所做的每件事都可以超速。

Sinatra應用程序可以以任何你想要的方式進行組織,並且比Rails更加靈活,無論應用程序有多大都是最好的選擇。

將所有東西都變成微服務並添加定製中間件讓Sinatra和Rack變得更加自然。

人們說這是針對較小的應用程序或體系結構,但沒有足夠的使用它,我不知道是誰開始了這個神話。