2011-02-25 45 views
3

我正在學習ruby並查看他的框架。我無法理解的一件事是框架如何在Ruby世界中處理請求。深入挖掘我發現有一個名爲Rack的中間件可以完成這項工作。Ruby框架 - 請求入口點

所以我的問題是:

  • 如何機架手柄的HTTP請求?
  • 來自PHP的有着名的「index.php」文件作爲入口點,這是在紅寶石世界的corrispective?

在此先感謝。

回答

4

從機架規格:

齒條應用是Ruby對象(不是一類),其響應於調用。它只需要一個參數,環境並返回一個包含三個值的數組:狀態,標題和正文。

在實踐中,機架應用程序啓動的常見方式是在config.ru文件中定義的。如果你看一下rails應用的基礎目錄,你會看到它。在rails中,它包含config/environment.rb,其中包含config/application.rb,其中包括boot.rb,其中包括gem和whatnot。從這一點開始,框架開始做它的事情。

使用rails的一般想法是調度程序接受任何請求並決定需要完成哪些操作。調度員可以被看作是你提到的index.php的等價物。

如何訪問config.ru文件(或機架應用程序的啓動方式)取決於應用程序的部署方式。 Phusion Passenger是apache和nginx的流行模塊,它將在您添加到服務器配置文件的任何應用程序的根目錄中查找config.ru。

這真的歸結爲部署選項。 Ruby應用程序可以通過apache/nginx模塊,直接通過用ruby編寫的Web服務器以及通過CGI運行。

Here is a description of the different ways web apps are deployed, from the passenger docs

+0

+1謝謝你,真正有用的反應!因此,請求以類似的方式處理,但在ruby的情況下,我們有「預加載」的應用程序進程等待某個事件(調用)發生。在PHP框架中,沒有「預加載」的應用程序,它在每個請求中加載。我是對的? – dmarucco 2011-02-25 16:40:24

+0

我對典型的PHP部署並不完全熟悉,但是通過CGI使用PHP時,必須每次啓動應用程序。如果通過CGI使用,Ruby會做同樣的事情。 Phusion Passenger會將您的Ruby應用程序的實際實例保存在內存中,因此請求不必每次都啓動一個新進程。 – roybotnik 2011-02-25 18:43:44