2011-11-23 5 views
2

En développement lorsque je change les vues, les contrôleurs, les routes, etc. Il n'est pas nécessaire de redémarrer le serveur rails, mais nous avons besoin dans l'environnement de production? Est-ce que cela économise quelque chose dans la mémoire pour que nous ayons besoin du redémarrage?Rails Développement et environnement de redémarrage des environnements de production?

Et à propos de tous les fichiers Gem dont nous avons besoin dans Gemfile (Gemfile.lock), ces Gems sont-ils chargés (ou sauvegardés quelque part) lorsque nous exécutons l'application rails, ou est-il chargé à la demande?

Répondre

5

Tous vos contrôleurs de vues et itinéraires sont mis en cache en production pour accélérer l'application. Ce serait une très mauvaise chose d'avoir à recharger tout cela pour chaque demande. Cela provient du développement.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 

De plus, vos gemmes sont chargées au démarrage de l'environnement d'application. Ceux-ci sont installés dans votre répertoire global de gem en faisant un bundle install. Lorsque vous déployez sur un autre serveur, vous devez également faire bundle install sur ceux-ci.

+0

Merci Sean Hill pour votre réponse. Mais je viens de trouver un autre fil sur les gemmes [Gems Link] (http://stackoverflow.com/questions/1329006/does-rails-load-all-installed-gems). @Justin dit totalement différent de vous, je suis confus. Merci – hanhp

+0

Il dit, "Non, seulement ceux que vous avez besoin ou sont requis par Rails." Si elles sont incluses dans votre Gemfile, elles sont requises pour votre application Rails. :-) Fondamentalement, vous pouvez avoir 1000 gemmes dans votre dossier gems, mais seulement ceux de votre Gemfile (requis par votre application) seront chargés. –

2

Le serveur development peut se permettre de recharger le code, les vues, les contrôleurs, les routes à chaque demande parce que vos demandes sont les seuls vont - et il faudrait plus de temps pour le développement si vous deviez redémarrer le serveur sur les changements. Cependant, toutes ces vérifications nécessitent stat(2) de chaque fichier et de vérifier les temps de modification pour chaque requête. C'est un lot des appels système. La réduction des appels système est l'une des principales méthodes d'amélioration de l'exécution et de l'évolutivité d'un programme, de sorte que le «cas courant» (des millions de requêtes vers le même code et la même configuration) est optimisé sur le serveur production. Mais le cas courant d'un serveur development est constant change.

+0

Il recharge les routes sans nécessiter de redémarrage. Je cours sur ma machine de développement locale, et je n'ai presque jamais à faire 'touch tmp/restart.txt'. –

+0

Merci @Sean, mis à jour. :) – sarnold

Questions connexes