2

我可以斷言軌/西納特拉應用程序初始化只有一次,所有請求共享同一個應用程序 實例期間堅持自定義類實例?或做新的請求產生新的應用程序實例?西納特拉/ Rails的:應用程序生命週期

是否可以在應用程序生命週期中實例化自定義類並保留它們而不使用會話,數據庫存儲或第三方服務?如果是這樣,從線程安全的角度來看有什麼影響?

我在想如何實現一個基於web的下載管理器,我目前正在評估基於ruby的框架。

回答

2

我可以斷言軌/西納特拉應用程序是 初始化只有一次, 共享相同的應用程序實例的所有要求?或者做新的 請求產生新的應用程序實例?

一般不。這真的取決於你的設置。如果您只使用重複使用相同應用程序對象的服務器(又稱機架處理程序)運行進程,則這將起作用。是否使用相同的應用程序實例取決於您使用的Web框架。例如,Sinatra會爲每個請求創建應用程序類的新實例(通常爲Sinatra::Application),作爲Rack端點使用。

是否有可能例如定製 類和應用 一生中堅持完全不使用會話, 數據庫儲存或第三方 服務?如果是這樣,從線程安全性 的角度來看, 意味着什麼?

如果你真的想堅持班級,你可能需要像磁懸浮列車。不過,我相信你的意思是堅持自定義類的實例。如果你不想使用數據庫進行持久化(你真的應該這樣做),那麼你可以回到隨Ruby提供的PStore。

+0

這是關於Sinatra的相當震撼的信息。我正在尋找關於如何讓Sinatra不會在每次請求時都打開新數據庫連接的信息。 Sinatra是否是錯誤的路? – mjnissim 2012-06-08 19:30:08

+0

爲什麼會這麼令人震驚? Rails也爲每個請求創建一個新的控制器實例。不要將數據庫連接存儲爲實例變量。例如,您可以執行'set:db,DB.connect(...)',然後以路徑中的settings.db的形式訪問它。 – 2012-06-19 16:43:01