PassengerPreStart sur Nginx + Phusion Passenger 3, pré-chargement des applications rubyonrails

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 !