回答
Sinatra是一個比Rails小得多,重量更輕的框架。如果你想快速運行一些只需分發幾個URL並返回一些簡單內容的東西,就可以使用它。看看Sinatra home page;這就是所有你需要啓動並運行「Hello,World」的過程,而在Rails中,你需要生成一個完整的項目結構,設置一個控制器和一個視圖,設置路由等等(我還沒有有一段時間寫了一個Rails應用程序,所以我不知道「Hello,World」的確切步驟數,但它肯定比Sinatra多)。 Sinatra的依賴性比Rails少得多,所以它更容易安裝和運行。
我們正在使用Sinatra作爲我們現在正在編寫的一些Web客戶端庫的快速測試Web服務器。我們可以編寫單個文件並將所有邏輯包含在該文件中,並且只有很少的依賴關係,這意味着與使用Rails應用程序相比,使用和運行我們的測試要容易得多。
Merb is being merged into Rails,所以很快就不應該有任何理由相互使用一個。它最初的設計與Rails相比體重更輕,分離度更高; Rails有更多的假設,你會使用ActiveRecord。但是當他們合併這兩者時,他們以類似的方式分離Rails,所以如果你已經學習了Rails,那麼只需堅持這一點,並隨着發展而來就可能值得。
對於Merb我不會說太多的話,但是Sinatra對小型或輕量級解決方案非常有效。如果你沒有使用大量的代碼,或者不需要一個龐大的網站,你可以用Sinatra編寫一個非常有效的網站,速度可以快得多,或者比Rails快兩倍(以我自己的觀點)。
Sinatra也非常適合零碎的應用程序,例如統計軟件包的前端。或者像ErrCount,這只是一個非常簡單的計數器。
因此,在使用Sinatra時,請考慮輕量級,快速且高度簡單化的Web應用程序(儘管複雜性是您的選擇)。
非常感謝您添加該細節。現在我可以看到Sinatra可能適用於我的編碼冒險。 – tundal45 2009-04-09 04:06:25
事情進行的方式,很快就會成爲一個毫無疑問的問題。
如前所述,Merb 2.0和Rails 3.0將會是同樣的事情。新組合的Merb和Rails核心團隊已經在努力實現這一目標。我不知道他們是否仍計劃在5月份發佈RailsConf(可能是測試版),但今年肯定會發布。
例如,如果您在使用除ActiveRecord之外的ORM時已經死亡,您可能現在從Merb開始,並在2.0(Rails 3.0)發佈時進行更新。目前,Merb通常被認爲是爲Rails提供了一個更好的框架,以適應不同的組件。
Sinatra看起來像一個Web應用程序的輝煌解決方案,它具有低接口複雜性和稍低於Merb/Rails常規的模型級代碼。實現簡單的RESTful API將是一個很好的用處。當涉及任何數量的HTML時,我不太確信它的價值,當涉及模板時更是如此。
同樣,Rails(現在即將推出Merb)現在坐在Rack之上,沒有理由不將孩子Sinatra應用包含到解決方案中:他們可以一起生活。有a blog post that discusses that very concept
- 1. 在這種情況下使用什麼會更好? C#或PHP?
- 2. 什麼情況下**會有用?
- 3. 在什麼情況下AppDomain.DoCallback()會失敗?
- 4. 在什麼情況下會http.ListenAndServe返回
- 5. ConcurrentBag.TryTake()在什麼情況下會失敗?
- 6. 在什麼情況下使用Django formset?
- 7. 在什麼情況/情況下,dynamic_cast <>可能會失敗?
- 8. 什麼情況下ostream :: write或ostream :: operator <<會失敗?
- 9. 在這種情況下什麼會更快String.Format或String.Replace?
- 10. 如何在使用情況下在什麼情況下使用tsql?
- 11. 在什麼情況下會使用IPP AggCat中的discoverAndAddAccountsResponse方法?
- 12. 你會在什麼情況下使用Select from without?
- 13. 我應該在什麼情況下使用Ebean或EbeanServer?
- 14. 在這種情況下使用什麼:服務或EventAggregator
- 15. 爲什麼在以下情況下不會調用「onPause」?
- 16. 在什麼情況下調用__rmul__?
- 17. 有什麼用在這種情況下
- 18. 在什麼情況下viewWillAppear被調用?
- 19. 缺省情況下使用DATABASE_URL和Sinatra/Sequel擴展
- 20. 在不重定向的情況下使用Sinatra和jQuery
- 21. TSQL情況下用或它
- 22. 如果我不調用transaction.close或transaction.rollback,會發生什麼情況?
- 23. 爲什麼在以下情況下會丟失方法?
- 24. 在Arc中,Block在什麼情況下是__NSMallocBlock__或__NSStackBlock__或__NSGlobalBlock__?
- 25. Android - 在什麼用戶情況下會onCccuracyChanged()觸發器?
- 26. 在什麼情況下C++析構函數不會被調用?
- 27. 在什麼情況下不會調用Sybase觸發器?
- 28. 在這種情況下,Perl會用什麼來比較?
- 29. 在什麼情況下Rank和Dense Rank會有用?
- 30. 在什麼情況下會調用iOS系統推送通知?
@布賴恩 - 非常感謝。這正是我想要發現的。 – tundal45 2009-04-09 03:05:39