2011-11-23 43 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