Questo tutorial segue un’installazione su debian Etch, nel nostro caso la macchina è un Apple Mini Mac (PPC).

Con Etch è diventato davvero immediato installare Ruby on Rails.

Prima aggiorniamo tutto e verifichiamo che alcuni pacchetti base siano presenti nella macchina:

$ sudo apt-get install gcc g++ make libc6-dev flex openssl curl wget bison lib64stdc+6 libstdc+6-4.1-doc

Installiamo Mysql 5

$ sudo apt-get install mysql-server libmysqlclient15-dev mytop

Ora si tratta di installare ruby:

$sudo apt-get install ruby ruby-dev rdoc irb rubygems libzlib-ruby libmysql-ruby

Vengono così installati ruby 1.8.5 e rubygems 0.9.0

Ora ci serve installare Subversion

$ sudo apt-get install subversion subversion-tools

Installiamo Imagemagick

$ sudo apt-get install imagemagick libmagick9-dev

Installazione di Ruby on Rails

Ora finalmente possiamo usare rubygems per installare Ruby on Rail e gli altri pacchetti necessari!

$ sudo gem install rails -y

installiamo un driver di connessione a mysql scritto in C che sostituisca l’originale driver scritto in Ruby:

$ sudo gem install mysql

e alcuni pacchetti necessari per la nostra applicazione, nel mio caso:

$ sudo gem install fastercsv map_by_method net-sftp net-ssh radius rmagick ferret

Installazione di SuperRedCloth

Mancherebbe da installare Redcloth, purtroppo la versione attuale ha diversi problemi sia come prestazioni che come risultati di rendering, installare la futura versione comporta qualche difficoltà in più:

In particolare ora redcloth necessita Ragel, un’interfaccia a eseguibili C, C++ che permette di incrementare le prestazioni di 10x.Ho preferito un’installazione da sorgenti rispetto al pacchetto in debian stable forse troppo datatato:


$ cd source
$ wget http://www.cs.queensu.ca/~thurston/ragel/ragel-5.20.tar.gz
$ tar xvf ragel-5.20.tar.gz
$ cd ragel-5.20
$ ./configure
$ make
$ sudo make install

A questo punto installamo da repository Superredcloth, la futura versione di Redcloth 4:


$ cd source
$ svn co http://code.whytheluckystiff.net/svn/redcloth/branches/superredcloth
$ cd superredcloth/
$ rake
$ rakegem
$ sudo gem install pkg/superredcloth-1.163.gem

Installazione di Mongrel

Mongrel:http://mongrel.rubyforge.org/ è un server HTTP scritto in ruby. in questo tutorial imposteremo un cluster di server mongrel che si occuperanno di servire la nostra applicazione rails. Il frontend sarà affidato al server http Nginx.

$ sud gem install mongrel mongrel_cluster -y

Bisogna poi effettuare delle operazione per lanciare Mongrel come un servzio, questa è una versione leggermente migliorata dello scipt init.d che viene con mongrel_cluster (/var/lib/gems/1.8/gems/mongrel_cluster-0.2.1/resources/mongrel_cluster)

in /etc/init.d/mongrel_clusters:


#!/bin/bash
#
# Copyright (c) 2006 Bradley Taylor, bradley@railsmachine.com
#
# mongrel_cluster       Startup script for Mongrel clusters.
#
# chkconfig: - 85 15
# description: mongrel_cluster manages multiple Mongrel processes for use \
#              behind a load balancer.
#              
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local:/usr/local/sbin:/usr/local/bin:/var/lib/gems/1.8/bin
CONF_DIR=/home/ettober/Sites/trunk_carta
RETVAL=0

# Gracefully exit if the controller is missing.
which mongrel_cluster_ctl >/dev/null || exit 0

# Go no further if config directory is missing.
[ -d "$CONF_DIR" ] || exit 0

case "$1" in
    start)
      mongrel_cluster_ctl start -c $CONF_DIR
      RETVAL=$?
  ;;
    stop)
      mongrel_cluster_ctl stop -c $CONF_DIR
      RETVAL=$?
  ;;
    restart)
      mongrel_cluster_ctl restart -c $CONF_DIR
      RETVAL=$?
  ;;
    *)
      echo "Usage: mongrel_cluster {start|stop|restart}" 
      exit 1
  ;;
esac      

exit $RETVAL


a questo punto:

$ sudo chmod +x /etc/init.d/mongrel_cluster

$ sudo update-rc.d mongrel_cluster defaults

Installazione Ngnix

Nginx, è un ottimo server web e proxy di fabbricazione russa. malgrado non sia ancora molto conosciuto è un’ottima per ottenere alte prestazioni, stabilità e un consumo ridotto di memoria. E’ attivo un wiki:http://wiki.codemongers.com/ dove una parte della documentazione è in via di traduzione dal russo.

alcuni prterequisiti:

apt-get install libpcre3-dev zlib1g-dev

su macchine i386 potremmo scaricare il pacchetto .deb da http://deb.wapper.ru/nginx/. Nel nostro caso siamo su PowerPC, scarichiamo quindi i sorgenti da: http://sysoev.ru/nginx/download.html

$ cd /source bq. $ wget http://sysoev.ru/nginx/nginx-0.5.17.tar.gz bq. $ tar -xvf nginx-0.5.17.tar.gz

ora si possono configurare i sorgenti, maggiori inso su: http://wiki.codemongers.com/NginxInstall

$ ./configure—sbin-path=/usr/local/sbin—pid-path=/var/run—conf-path=/etc/nginx.confcat /et —error-log-path=/var/log/ngnx—http-log-path=/var/log/ngnx

Configuration summary
  + threads are not used
  + using system PCRE library
  + OpenSSL library is not used
  + md5 library is not used
  + sha1 library is not used
  + using system zlib library

  nginx path prefix: "/usr/local/nginx" 
  nginx binary file: "/usr/local/sbin" 
  nginx configuration file: "/etc" 
  nginx pid file: "/var/run" 
  nginx error log file: "/var/log/ngnx" 
  nginx http access log file: "/var/log/ngnx" 
  nginx http client request body temporary files: "/usr/local/nginx/client_body_temp" 
  nginx http proxy temporary files: "/usr/local/nginx/proxy_temp" 
  nginx http fastcgi temporary files: "/usr/local/nginx/fastcgi_temp" 

$ sudo make install clean

a questo punto è necessario un init.d script per attivare nginx all’avvio del server:

$ sudo vi /etc/init.d/nginx

#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local:/usr/local/sbin:/usr/local/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC="Nginx HTTP Server" 
test -x $DAEMON || exit 0
# Get lsb functions
#. /lib/lsb/init-functions
. /etc/default/rcS
start() {
echo "Starting $DESC... " 
# echo "Starting $DESC: " 
if ! start-stop-daemon --start --quiet --oknodo --exec $DAEMON
>/dev/null 2>&1; then
status=$?
echo $status
return $status
fi
log_end_msg 0
return 0
}
case "$1" in
start)
start
;;
stop)
echo "Stopping $DESC: " 
start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
echo $?
;;
restart|force-reload)
$0 stop
sleep 1
start
#echo "$NAME." 
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0

$ sudo chmod +x /etc/init.d/nginx bq. $ sudo update-rc.d nginx defaults bq. $ sudo /etc/init.d/nginx start

Miglioramento delle prestazioni

La nostra macchina, un Mac mini G4 con soli 256mb di ram ha bisogno di una certo affinamento delle impostazioni per ottenere prestazioni adeguate:

evitiamo di avviare il login grafico all’avvio:

$ sudo mv /etc/rc2.d/S21gdm /etc/rc2.d/_S21gdm