Costruire un ambiente Ruby personalizzato

Installare un proprio ambiente ruby nel proprio account Unbit e' una pratica consigliata per diversi motivi.

Prima di tutto permette di slegarsi dalla versione presente sui server Unbit, permette una facile istallazione delle gemme e in molti casi fa risparmiare un bel po' di address space. Inoltre non dovrete MAI PIU' preoccuparvi che un nostro aggiornamento possa arrecare problemi all'applicazione che per pigrizia non mantenete piu' da 2 anni...

Per la costruzione dell'ambiente e' necessario disporre di un ambiente GNU/Linux a 32 bit (i kernel unbit sono ibridi quindi puoi anche compilare applicazioni a 64 bit ma te lo sconsigliamo vivamente visto che il loro consumo di address space e' quasi doppio).

Se non hai una macchina Linux puoi istallarne una versione virtualizzata tramite tool come qemu o virtualbox.

Se il tuo sistema Linux e' a 64bit consulta la documentazione della tua distribuzione su come costruire una chroot-jail a 32bit.

Preparare la home

Una volta avviata la vostra macchina Linux create la directory in cui istallerete la vostra versione di ruby (che poi provvederete a trasferire via ftp sul server Unbit). La directory deve avere lo stesso nome della home presente sul server Unbit, quindi se il vostro account e' pippo la directory da creare sul vostro sistema sara' /accounts/pippo.

Dovrete avere privilegi di amministratore per creare questa directory, quindi:

sudo mkdir /accounts/pippo

fara' il suo dovere.

Ora per comodita' assegnate alla directory /accounts/pippo i permessi del vostro utente (vi permettira' di costruire l'ambiente senza privilegi particolari)

ponendo che lo username del vostro desktop linux sia 'gigione' lanciate un:

sudo chown gigione.gigione /accounts/pippo

ora potete dimenticarvi del sudo, i prossimi comandi potrete eseguirli con il vostro utente.

scaricare i sorgenti di ruby

da questa url

http://ftp.ruby-lang.org/pub/ruby/

potete scaricare i sorgenti di ruby, scegliete la versione che preferite (ad esempio ruby-1.8.7-p249.tar.gz) e scaricatela.

Decomprimetela dove preferite e preparatevi al prossimo passaggio

compilare ruby

spostatevi nella directory dove avete decompresso l'archivio dei sorgenti e lanciate:

./configure --prefix=/accounts/pippo --enable-pthread --enable-shared --with-default-kcode=utf8

make

make install

ATTENZIONE: con ruby 1.9 l'opzione --with-default-kcode=utf8 non serve

potete ovviamente modificare le opzioni del ./configure come preferite ma ricordatevi di mantenere sempre --prefix e --enable-shared. La seconda in realta' non e' strettamente necessaria, ma puo' tornare comoda in caso si intenda utilizzare il plugin "Rack" di uWSGI (ancora in sviluppo). Per FastCGI/UFCGI e uRack --enable-shared non e' necessaria (ma includerla non costa nulla)

rubygems

Una volta preparato il nostro ambiente ruby e' necessario istallare il supporto per le gemme

da questo link

http://rubyforge.org/projects/rubygems/

scaricate la versione piu' recente delle rubygems in formato tgz e decomprimetela dove preferite.

spostatevi nella directory appena creata e lanciate:

/accounts/pippo/bin/ruby setup.rb install

se tutto e' andato a buon fine il comando gem sara' disponibile all'interno di /accounts/pippo/bin/gem

istallate le gemme

completate la costruzione dell'ambiente istallando le gemme che vi servono. Ad esempio se avete intenzione di usare rails potete usare il seguente comando:

/accounts/pippo/bin/gem install --no-rdoc --no-ri rails mysql fcgi sqlite3-ruby

attenzione, per la gemma mysql e' necessario avere istallati gli header di mysqlclient, per fcgi sono necessari quelli di libfcgi e per sqlite3-ruby quelli di libsqlite3.

aggiungete tutte le gemme che volete ma ricordatevi di non omettere le opzioni --no-rdoc --no-ri altrimenti vi ritroverete con tonnellate di documentazione di cui quasi certamente non avrete bisogno.

copiate tutto su Unbit

Ora in locale abbiamo un ambiente ruby pienamente funzionante, non resta che copiarlo nel vostro account Unbit. Accertatevi di aver configurato un accesso FTP che vi permetta di accedere a tutta la home (quindi campo home vuoto). Sul vostro client ftp spostatevi nella directory locale /accounts/pippo e limitatevi a copiare le directory al suo interno (di base sono bin lib e share) nella home su Unbit.

L'operazione potrebbe richiedere un bel po' di tempo in base alla vostra connessione.

Un primo test

Scegliete uno dei vostri domini/sottodomini per effettuare il primo test. Limitatevi a creare la docroot dentro /www in cui copierete questo semplice CGI (chiamatelo index.rb):

puts "Content-type: text/plain"
puts
puts RUBY_VERSION
puts RUBY_RELEASE_DATE
puts RUBY_PATCHLEVEL

se tutto e' andato a buon fine, richiamando la url del dominio/sottodominio in questione dal vostro browser vedrete stampata la versione di ruby in uso. Se corrisponde con quella che avete compilato allora potete esultare.

Un po' di note

Nell'howto si fa riferimento a /accounts/pippo, ovviamente dovrete sempre sostituirlo con il nome reale del vostro account, quindi /accounts/pluto, /accounts/topolino ecc. ecc. FATE ATTENZIONE MANIACI DEL COPIA E INCOLLA

Usate l'ambiente costruito anche in locale, vi risparmiera' un sacco di grattacapi e la necessita' di dover dire la fastidiosa (per noi) frase "a me in locale funziona". Se non volete affaticare troppo le vostre dita aggiungete /accounts/pippo/bin al PATH di sistema cosi' avra' priorita' sul ruby installato dalla vostra distribuzione.

Il protocollo FTP non supporta la gestione dei link simbolici, questi quindi verrano sostituiti con una nuova copia del file. Non e' un grosso problema ma e' bene tenerlo a mente.

Se istallate delle gemme che richiedono delle librerie non presenti sui server Unbit, dovrete compilarne una copia all'interno di /accounts/pippo/lib (e' sufficiente impostare il --prefix=/accounts/pippo in fase di ./configure)

E' molto probabile che in corso d'opera aggiungiate/rimuoviate/aggiorniate qualche gemma o ruby stesso. E' sufficiente risincronizzare la copia locale con quella unbit.

Gli utenti con ssh hanno la vita piu' semplice in quanto possono utilizzare tool come rsync per mantenere sincronizzato l'ambiente con il minimo sforzo:

rsync -avztgo -e "ssh -p PORT" /accounts/pippo/ pippo@X.X.X.X:

(sostituite a PORT e X.X.X.X la porta e l'indirizzo del server ssh... e attenti allo username che non sara' certo pippo !!!)

Verificate che il vostro client ftp rispetti i permessi (in particolare quelli di esecuzione). Ad esempio il file /bin/ruby deve avere permessi 750 se e' a 640 il vostro client fa pasticci.

HowtoCustomRuby (l'ultima modifica รจ del 2010-04-16 07:58:50, fatta da RobertoDeIoris)