Installazione di Ruby on Rails in Leopard

Con l’uscita di Leopard, Apple ufficializza il supporto a RoR, inserendolo direttamente nell’installazione base del proprio OS.
Per avere una installazione un po’ più completa, basta aggiungere MySQL, vediamo come rendere la nostra Leopard Box, una perfetta piattaforma per lo sviluppo in RoR.

N.B. Si suppone installato il pacchetto Xcode, installabile dal DVD di Leopard!

Verifica dell’installazione di Ruby e Rails

Per verificare se effettivamente ruby e rails sono installati, basta lanciare questo comando:

ruby -v; rails -v

Che nel mio caso restituisce:

ruby 1.8.6 (2007-06-07 patchlevel 36) [universal-darwin9.0]
Rails 1.2.3

… 1.2.3? … vecchiotto… la stabile è ora la 2.0.2… vabbè, rimediamo, intanto aggiorniamo il sistema gem e poi lanciamo un aggiornamento di tutte le gemme presenti già nel sistema, l’aggiornamento di rails però non installa la nuova gemma, tipica delle installazioni di rails v2, chiamata activeresources, installeremo anche quella:

sudo gem update --system
sudo gem update
sudo gem install activeresource

Hmmmm! Manca una gemma che può rendersi molto utile durante lo sviluppo di applicazioni: rmagick! Che però dipende da imagemagick, vediamo come installare entrambi.

Installazione di MacPorts

MacPorts è un grande repository di software Linux portati a Mac, è una risorsa molto potente, in quanto rende disponibile in maniera semplice (e piuttosto familiare per un utente Debian/Ubuntu, anche se concettualmente è più simile al sistema Gentoo) un vastissimo parco di programmi utili, come ad esempio nmap… quale amministratore di rete potrebbe farne a meno? ^_^
Bene, dopo il pistolotto iniziale, installiamo macports scaricando il dmg per Leopard e lanciando la solita installazione… (Ci mette un bel po’, non preoccupatevi, macports si sta compilando per il vostro sistema…).
Per rendere più semplice la navigazione e la scelta dei pacchetti, si può installare anche porticus, una specie di package manager… una GUI per l’accesso al repository di macports.
Ah! non dimenticate di dire a bash dove trovare l’eseguibile di port, pena il dover continuamente dare il percorso completo da riga di comando (I’m so lazy…), quindi aggiungete queste righe al file .bash_profile

export PATH=$PATH:/opt/local/bin
export MANPATH=$MANPATH:/opt/local/share/man
export INFOPATH=$INFOPATH:/opt/local/share/info

E chiudete (Command+q) e riaprite il terminale!

Installazione di Rmagick

Semplice… usate porticus o più velocemente copiate e incollate questi comandi nel terminale:

sudo port install tiff -macosx
sudo port install ImageMagick
sudo gem install rmagick

Anche qui, port non fa altro che rendere abbastanza trasparente la compilazione del pacchetto, preoccupandosi delle fasi preliminari di configurazione della sorgente, questo però implica che l’installazione sia un po’ lunga, in quanto deve compilare anche tutte le dipendenze mancanti nel sistema per quel determinato pacchetto.

Installazione di MySQL

Alla data di questo howto è finalmente disponibile un package DMG ufficiale per Leopard (Mac OS X 10.5), io ho scelto la versione per x86_64, d’altronde questo OS è a tutti gli effetti un OS a 64bit, no? Una volta finito il download, viene montato automaticamente il dmg, presentandoci due pkg (uno è il DB vero e proprio, l’altro è l’aggiunta alle applicazioni in startup automatico) e un prefPane, installiamoli tutti.
MySQL viene installato in /usr/local/mysql, la socket è in /tmp/mysql.sock e lo startup item in /usr/local/MySQLCOM.

L’avvio automatico è affidato a launchctl, perciò, basta creare un file chiamato /Library/LaunchDaemons/com.mysql.mysqld.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>KeepAlive</key>
	<true/>
	<key>Label</key>
	<string>com.mysql.mysqld</string>
	<key>Program</key>
	<string>/usr/local/mysql/bin/mysqld_safe</string>
	<key>RunAtLoad</key>
	<true/>
</dict>
</plist>

Proviamolo lanciando questo comando: sudo launchctl load /Library/LaunchDaemons/com.mysql.mysqld.plist

Ora dovrebbe funzionare, priviamo a riavviare per vedere se parte in automatico!

Sean O’Sullivan consiglia di creare, per comodità, un alias nel file delle risorse della shell, quindi aggiungete queste righe al file .bash_profile (e poi riavviate il terminale):

alias start_mysql="sudo /usr/local/MySQLCOM/MySQLCOM start"
alias stop_mysql="sudo /usr/local/MySQLCOM/MySQLCOM stop"
alias restart_mysql="sudo /usr/local/MySQLCOM/MySQLCOM/MySQLCOM restart"

Come noterete, lanciando il comando mysql, la shell non lo trova, va aggiunto al file delle risorse della shell, in modo che sappia dove trovarlo, questo si può fare con questo comando da, aggiungere al file .bash_profile (e poi riavviate il terminale):

alias mysql="/usr/local/mysql/bin/mysql"
alias mysqladmin="/usr/local/mysql/bin/mysqladmin"

Ed ora installiamo la gemma:

sudo su -
ARCHFLAGS='-arch x86_64' gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
install_name_tool -change /usr/local/mysql/lib/mysql/libmysqlclient.15.dylib /usr/local/mysql/lib/libmysqlclient.15.dylib /Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle

Annotazione personale… Hmmmmm! A chi mi dice che GNU/Linux è difficile, farò leggere questo paragrafo… O__O Da utente sia MAC che Ubuntu, posso dirvi che nella mia derivata Debian preferita, bastava aprire il gestore di pacchetti, cercare mysql server e installarlo… 3 click… 3 diavolo di click… O_O

And… That’s all folks! ^_^

Concetti di programmazione web

Quando si programmano siti web, un grosso problema che con cui ci si scontra sempre più spesso è l’infinita diversità dei browser con cui gli utenti possono accedere al nostro lavoro, su html.it è recentemente apparsa la traduzione di un interessante articolo che spiega due tecniche di approccio moderne e intelligenti per aumentare la fruibilità del sito.
E’ sempre buona norma rispettare queste due tecniche di progettazione e realizzazione, anche se si può decidere di non adottarla in situazioni particolari, come i programmi web based. In questo caso dare ai clienti le funzionalità che si aspettano di trovare in programmi che useranno tutti i giorni è più importante dell compatibilità con quanti più browser possibili, in questo caso e solo in questo è lecito programmare per specifiche minime, ricordando comunque, che, per lo meno browser dello stesso periodo (per esempio ie6, ff1.5 e safari/khtml), dovrebbero poter usufruire del programma allo stesso modo. In questo modo una programazione multipiattaforma e web based di applicazioni per il mondo del lavoro deve comunque abbracciare quanti più utenti possibile, lasciando così al cliente la libertà di scegliere la propria piattaforma di lavoro, aggiornata si, ma non esclusiva. La realizzazione sarà un po’ difficoltosa per venire incontro alle esigenze dei diversi browser, ma il prodotto finale sarà potente e portabile rendendo il cliente più felice e libero. Ricordo inoltre che grazie a librerie come Script.aculo.us, la parte multipiattaforma viene quasi completamente nascosta nei metodi richiamati, sollevando di fatto il programmatore dal dover gestire le incompatibilità dei diversi browser.

In conclusione, con la crescita della programmazione web based in diversi campi si possono adottare diversi target nella progettazione di queste applciazioni, la classica pagina web dovrà essere accessibile da quante più versioni di diversi browser possibili, quindi adottare le tecniche segnalate nell’articolo che ho linkato all’inizio è fondamentale, per contro, quando l’applicazione web based è destinata a un pubblico ristretto, solitamente quando è un programma di lavoro in una intranet, è lecito definire un set di specifiche minime per poterla utilizzare.