2012-11-27 218 views
1
測試軌道/機架應用

我的Rails的疊層的簡單化的理解是,它執行以下操作(一般)使用導軌控制檯

  1. 輸入是一個HTTP消息(GET,POST,PUT,DELETE,HEAD ),一個URL,一些(可選的)cookie,一個(可選的)會話令牌以及可能以JSON或XML格式打包的一些數據。
  2. 這個HTTP消息由Rack處理,它可以通過一組「中間件」功能來運行它,這些功能可以從消息中添加或刪除數據,並可以使用這些數據來添加,修改或刪除程序數據存儲中的數據。
  3. Rack輸出端的HTTP消息被髮送到Rails路由器,Rails路由器將其映射到一個控制器,一個動作和一個params散列,其中包含會話信息,cookie和其他參數。數據被分派到適當的控制器。
  4. 控制器方法分析參數,並將其與數據庫中的數據(通過模型)進行算法結合,可選地更改數據,然後將一組以@開頭的變量分配給視圖模板。
  5. 視圖模板獲取數據並將其與視圖模板合併以形成具有適當格式(例如,HTML,JS,JSON,XML等)的視圖,或者它告訴調用者(通過HTTP返回代碼)重定向到另一個URL。

我願做什麼用我的Rails Web應用程序,使用Rails的控制檯

  1. 撰寫有效的HTTP消息的URL,會話ID,cookie和編碼數據(JSON或XML) 。
  2. 將此數據注入Rack接口,並檢查發送給Rails路由器之前出現的內容。
  3. 然後,我想將這些數據發送到Rails路由器,並查看在它進入控制器之前發生了什麼。
  4. 然後,我想將這些數據發送到控制器,並查看它發送到視圖模板之前發生了什麼。
  5. 然後我想將這些數據運行並通過視圖模板運行,並在STDOUT上顯示,或讓它自動打開Web瀏覽器並查看它的呈現。

是否有任何現有的Rails工具可以做到這一點?如果沒有,任何人都可以將我指向這些接口出現的Rails代碼?

回答

0

你要找的大部分內容都在rails的actionpack庫中。

ActionDispatch處理與機架,中間件和路由器的接口。該請求會將路由器作爲最後一件中間件。路由器本身在action_dispatch/routing/mapper中被調用。因此,如果您想在請求路由器之前攔截請求,請在路由被調用之前注入您自己的中間件。

一旦路由器映射驗證它具有有效的路由,它會調用railties庫中已結束的應用程序。我相信這會讓你回到ActionController中間件中。我不確定你到底想要在截獲控制器之前綁定的位置,但我猜測它會在ActionMiddleware類的某個地方。

從那裏你進入actionpack。你的控制器調用的渲染/重定向設置了actionpack中會發生的事情。我不確定AC到達AP的哪個位置,但您應該能夠通過它篩選並找到您要找的路徑。

至於響應,你回到中間件。一旦導軌將視圖拼接在一起,它基本上會展開,並在將響應發送回Rack之前將其放回中間件堆棧。

希望有所幫助。

+0

感謝您的洞察。我會研究它。 –