Développeur Web RoR

Aller au contenu | Aller au menu | Aller à la recherche

Tag - passenger

Fil des billets

lundi 13 décembre 2010

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 http://foo.com/; # <--- added

passenger_pre_start http://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 !

jeudi 4 novembre 2010

Script - Installation Ruby enterprise edition (REE) + Passenger + Nginx et Rmagick

Bon vous allez me dire encore... ouai c'est vrai, mais là le script est écrit !

Testé sur Debian et Ubuntu, il installe Ruby enterprise edition feb-2010, passenger 3.0, Nginx 0.8.53, et rmagick. 

Plus qu'à faire :

sudo wget http://blog.escarworld.com/public/install-ree-nginx-passenger.sh

sudo chmod +x install-ree-nginx-passenger.sh

./install-ree-nginx-passenger.sh


Après l'installation, vous pouvez changer dans le fichier /opt/nginx/conf/nginx.conf 

passenger_root /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/passenger-3.0.0;

passenger_ruby /opt/ruby-enterprise-1.8.7-2010.02/bin/ruby;

en 

passenger_root /opt/ree/lib/ruby/gems/1.8/gems/passenger-3.0.0;

passenger_ruby /opt/ree/bin/ruby;

Mettez dans votre /opt/nginx/conf/nginx.conf où ça doit aller(en dessous de l'exemple de server { .... } ) :

# Pour activer la compression Gzip (il y a ce qui faut dans le script pour que ça marche)

    gzip              on;

    gzip_proxied      any;

    gzip_http_version 1.1;

    #gzip_min_length   1100;

    gzip_comp_level   5;

    #gzip_buffers      4 8k;

    gzip_types        text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/atom+xml;

    #gzip_vary        on;

    #gzip_disable     "MSIE [1-6]\.";

# Pour une application

    server {

      listen 80;

      server_name ledomainedemonappli.com;

      root /usr/local/webapps/monappli/current/public;

      passenger_enabled on;

    }

Ajouter dans /etc/init.d le script d'nginx :

sudo cd /etc/init.d && sudo wget http://blog.escarworld.com/public/nginx

sudo chmod +x /etc/init.d/nginx

Et voilà vous deployez votre application monappli avec capistrano dans /usr/local/webapps .

Vous pouvez :
 - démarrer nginx : 

 - redémarrer nginx : 
sudo /etc/init.d/nginx restart

 - recharger la conf sans redémarrer : 
sudo /etc/init.d/nginx reload

 - stopper nginx : 
sudo /etc/init.d/nginx stop


Si vous avez des améliorations... laissez des commentaires !


lundi 18 octobre 2010

Phusion Passenger 3.0.0 vient de sortir en version finale

Tout est dans le titre : passenger, le serveur rubyonrails vient de sortir dans sa dernière version (3.0.0) pour l'installer :

sudo gem install passenger

L'article sur le blog officiel : http://blog.phusion.nl/2010/10/18/phusion-passenger-3-0-0-final-released/

mardi 12 octobre 2010

Installation Ruby enterprise edition (REE) + Passenger + Nginx

Voici les étapes pour installer ree avec passenger et nginx, en gras les commandes à taper :

sudo aptitude install build-essential zlib1g-dev libssl-dev libreadline6-dev

Allez récupéré REE avec l'url disponible ici (elle est dynamique) : http://www.rubyenterpriseedition.com/download.html

wget URL_REE

wget http://nginx.org/download/nginx-0.8.52.tar.gz

tar xzf nginx-0.8.52.tar.gz

tar xzf ruby-enterprise-1.8.7-2010.02.tar.gz

sudo ./ruby-enterprise-1.8.7-2010.02/installer

Enter (to continue)

Enter (/opt/ruby....)

Compilation.... puis message :

To install the aforementioned gems, please use the following commands:

* /opt/ruby-enterprise-1.8.7-2010.02/bin/ruby /opt/ruby-enterprise-1.8.7-2010.02/bin/gem install mysql

Enter

sudo /opt/ruby-enterprise-1.8.7-2010.02/bin/passenger-install-nginx-module 

Enter   

2 (Configuration à la main)

/home/votre_home/nginx-0.8.52/ (Please specify the directory:)

Enter (Please specify a prefix directory [/opt/nginx]:)

--with-http_gzip_static_module --with-http_ssl_module --with-http_flv_module --with-md5-asm --with-md5=/usr/include --with-sha1-asm --with-sha1=/usr/include (Extra arguments to pass to configure script:)

Enter (confirm)

Compilation d'nginx....

Enter

A la fin de l'installation vous avez les lignes de configuration des serveurs virtuels (virtual host) :

   server {

      listen 80;

      server_name www.yourhost.com;

      root /somewhere/public;   # <--- be sure to point to 'public'!

      passenger_enabled on;

   }

On va ici écrire le script init.d pour nginx :

sudo nano /etc/init.d/nginx

Copiez / Coller ce qui suit :

#==============  Début  ==============

#! /bin/sh

### BEGIN INIT INFO

# Provides:          nginx

# Required-Start:    $all

# Required-Stop:     $all

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: starts the nginx web server

# Description:       starts nginx using start-stop-daemon

### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DAEMON=/opt/nginx/sbin/nginx

NAME=nginx

DESC=nginx

PID=/opt/nginx/logs/$NAME.pid

test -x $DAEMON || exit 0

# Include nginx defaults if available

if [ -f /etc/default/nginx ] ; then

        . /etc/default/nginx

fi

set -e

case "$1" in

  start)

        echo -n "Starting $DESC: "

        start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS

        echo "$NAME."

        ;;

  stop)

        echo -n "Stopping $DESC: "

        start-stop-daemon --stop --quiet --pidfile $PID --exec $DAEMON

        echo "$NAME."

        ;;

  restart|force-reload)

        echo -n "Restarting $DESC: "

        start-stop-daemon --stop --quiet --pidfile $PID --exec $DAEMON

        sleep 1

        start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS

        echo "$NAME."

        ;;

  reload)

      echo -n "Reloading $DESC configuration: "

      start-stop-daemon --stop --signal HUP --quiet --pidfile $PID --exec $DAEMON

      echo "$NAME."

      ;;

  *)

        N=/etc/init.d/$NAME

        echo "Usage: $N {start|stop|restart|force-reload}" >&2

        exit 1

        ;;

esac

exit 0

#===============  Fin   ===============


Donnez les droits d'executions :

[EDIT] oups les droits d'executions c'est +x

sudo chmod +x /etc/init.d/nginx

Et vous pouvez démarrer nginx :

sudo 

/etc/init.d/nginx start

Si vous pouvez faire des liens symboliques sur les binaires pour éviter de taper le chemin absolu :

/opt/ruby-enterprise-1.8.7-2010.02/bin/gem

/opt/ruby-enterprise-1.8.7-2010.02/bin/irb

/opt/ruby-enterprise-1.8.7-2010.02/bin/rake

/opt/ruby-enterprise-1.8.7-2010.02/bin/ruby