2011-11-23 45 views
2

在開發中,當我更改視圖,控制器,路線等時,不需要重新啓動導軌服務器,但是我們在生產環境中確實需要?它是否在內存中保存了某些東西,以便我們需要重新啓動?Rails開發和生產環境重新啓動要求?

關於我們在Gemfile(Gemfile.lock)中需要的所有Gem文件,當我們運行rails應用程序時是加載(或保存到某處)的Gem還是按需加載?

回答

5

所有視圖控制器和路由都被緩存在生產環境中,以加快應用程序的速度。爲每個請求重新加載所有這些將是一件非常糟糕的事情。這是從development.rb:

# In the development environment your application's code is reloaded on 
# every request. This slows down response time but is perfect for development 
# since you don't have to restart the webserver when you make code changes. 
config.cache_classes = false 

此外,您的寶石加載時,應用程序環境啓動。這些通過執行bundle install安裝到您的全局gem目錄。當您部署到另一臺服務器時,您還必須對這些服務器執行bundle install

+0

感謝Sean Hill的回覆。但我剛剛發現了另一個關於寶石的線索[Gems Link](http://stackoverflow.com/questions/1329006/does-rails-load-all-installed-gems)。 @Justin對你完全不同,我很困惑。謝謝 – hanhp

+0

他說,「不,只是那些你需要或Rails需要的。」如果它們包含在您的Gemfile中,那麼它們對於您的Rails應用程序是必需的。 :-)基本上,您的寶石文件夾中可以有1,000個寶石,但只有Gemfile中的那些(您的應用需要)將被加載。 –

2

development服務器能承受重載的代碼,視圖,控制器,每個請求的路線,因爲您的要求是唯一去的 - 如果你重新啓動服務器,將需要更多的時間發展在變化。

但是,所有這些檢查都需要重新編寫每個單個文件並檢查每個請求的修改時間。這是系統調用的lot。減少系統調用是提高程序運行時間和可擴展性的一個重要方法,因此在「production」服務器中優化了「常見情況」 - 數百萬個對相同代碼和配置的請求。但development服務器的常見情況是常量更改

+0

它不需要重新啓動即可重新加載路由。我在我的本地開發機器上運行pow,而且我幾乎不需要執行'touch tmp/restart.txt'。 –

+0

謝謝@Sean,更新。 :) – sarnold