Depuis passenger 3, il existe une directive qui permet de dire à nginx de faire une requête sur le serveur spécifié au démarrage d'nginx.
Du coup l'application se pré-charge pour que la première requête utilisateur (ou d'un moteur de recherche) ne prenne pas 3 heures, elle s'appelle passenger_pre_start :
server {
listen 80;
server_name foo.com;
root /webapps/foo/public;
passenger_enabled on;
}
server {
listen 3500;
server_name bar.com;
root /webapps/bar/public;
passenger_enabled on;
}passenger_pre_start https://foo.com/; # <--- added
passenger_pre_start https://bar.com:3500/; # <--- added
Le problème en gros c'est que les instances de rails se mettent en veille quand elles ne sont plus utilisées (PassengerPoolIdleTime). Pour palier à ceci il existe la variable passenger_min_instances qui correspond au nombre minimum d'instances que passenger ne doit pas clean-upé (ah bon c'est pas français :-) ) :
server {
listen 80;
server_name foo.com;
root /webapps/foo/public;
passenger_enabled on;
passenger_min_instances 1; # <--- added
}
Voilà comme ça vos applications rails 3 sont toujours au top niveau premier chargement !