Archivio di Maggio 2008

Usare gli Shortcut Blocks di ruby…

Sabato, 17 Maggio 2008

Mettiamo il caso di avere la necessità di ottenere un array contentente i nomi di tutti gli utenti del nostro sito.
Il metodo che viene subito in mente allo sviluppatore ruby è ovviamente basato sul metodo speciale collect e quindi sull’uso dei blocchi. Niente di più conciso e veloce…

User.find(:all).collect {|u| u.name}

Oggi invece ho scoperto gli shortcut blocks…cioè delle vere e proprie scorciatoie che rendono le operazioni ancor più semplici:

User.find(:all).collect(&:name)

Naturalmente il risultato della riga di codice è esattamente lo stesso.
E’ naturalmente possibile giocare ulteriormente rendendo lo stesso array tutto in minuscolo:

User.find(:all).collect(&:name).collect(&:downcase)

Ciao!
Filippo

Welcome back Debugger!

Venerdì, 16 Maggio 2008

E’ proprio il caso di dirlo, bentornato debugger!!

Scovare problemi e analizzare le proprie applicazioni è ora più semplice con Rails 2.0 e ruby-debug

sudo gem install ruby-debug

e il debugger è installato. Poi per utilizzarlo vi basterà inserire la parolina magica “debugger” nel punto dell’applicazione che volete monitorare.

def nome
utente = User.find(:first)
debugger
render :text => “Ciao #{utente.nome} #{utente.cognome}”
end

ed avviare il server con l’opzione —debugger oppure -u

script/server -u

Quando il codice esegue il comando debugger sarà dunque possibile digitare ad esempio irb e quindi analizzare le istanze e le variabile direttamente da console.

Per una lista completa dei comandi è possibile digitare help e una volta scelto il comando è possibile ottenere ulteriore aiuto scrivendo help nomecomando… più semplice di così!!

Alla prossima!

Installazione di sqlite3 su ubuntu 7.10 (Gutsy Gibbon)

Mercoledì, 14 Maggio 2008

Oggi ho raso al suolo il mio VPS (Virtual Private Server) di test (Ubuntu 7.10) e una volta reinstallato e riconfigurato tutto volevo fare un prova con rails 2.02 e il suo database di default sqlite3. Amara sopresa:

sudo apt-get install sqlite3
sudo gem install sqlite3-ruby

Building native extensions.  This could take a while

ERROR:  Error installing sqlite3-ruby:

ERROR: Failed to build gem native extension.

/usr/bin/ruby1.8 extconf.rb install sqlite3-ruby

checking for sqlite3.h… no

make

make: *** No rule to make target `ruby.h‘, needed by
`sqlite3_api_wrap.o’
.  Stop.

Gem files will remain installed in
/usr/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.1 for inspection

Dopo varie ricerche su forum e newsgroup ho trovato la soluzione al problema…mancavano le “development libraries”…

Quindi ho ripetuto l’installazione includendo anche le librerie…

sudo apt-get install sqlite3 libsqlite3-dev
sudo gem install sqlite3-ruby

…e tutto ha magicamente funzionato!

Spotlight fa le bizze…

Venerdì, 9 Maggio 2008

Da qualche giorno ho gravi problemi con spotlight del mio macbook (con Leopard). Dopo la classica pulizia di primavera (con Onyx) spotlight ha iniziato a creare problemi…

Indicizza selvaggiamente tutto il disco di avvio del mio amato macbook ma…non si ferma mai! E’ come se andasse in loop, indicizza tutto e una volta finito attende qualche secondo e ricomincia da capo. Ovviamente questo è un grosso problema, il mac diventa inutilizzabile, il dual core va a palla e il disco ravana all’infinito.

Ho provato dunque a cancellare il file di indice sia manualmente (sudo rm -r /.Spotlight-V100) sia tramite terminale con il comando mdutil.

Nello specifico i comandi che si devono dare sono:

sudo mdutil -E /

per cancellare l’indice relativo al disco principale (specificato con /). Nel caso si volessero cancellare gli indici di altri volumi è sufficiente passargli il path al posto di /.

Altri comandi utili possono essere:

sudo mdutil -s /

che restituisce lo stato (indexing enabled o disabled)

sudo mdutil -i on /

per attivare l’indicizzazione

sudo mdutil -i off /

per disattivare l’indicizzazione

Se vogliamo fare delle modifiche a tutti i volumi contemporaneamente basta usare aggiungere l’opzione “-a” alla riga di comando.

Esiste poi un comando importantissimo: mdimport

Mdimport si occupa di importare i dati relativi ai file nel database affinché Spotlight sia ingrado di cercare correttamente ciò che l’utente ricerca. L’opzione -L (sudo mdimport -L) dovrebbe stampare a video la lista degli “importers” installati.

E qui viene il bello (anzi il brutto): nel mio caso restituisce una lista vuota (null). Molto preoccupante :(

Mi auguro di non dover ricorrere ad un “archivia e installa”, sarebbe una sconfitta. C’e anche da dire poi che il mio macbook è acceso almeno 12/13 ore al giorno da un paio d’anni abbondanti…

Vi tengo aggiornati

C’era una volta Mongrel…

Mercoledì, 7 Maggio 2008

passenger modrails

C’era una volta Mongrel..poi venne Passenger
Da qualche settimana è stato rilasciato Passenger (per gli amici mod_rails). Si tratta di un ambizioso progetto con lo scopo di rendere facile e veloce il deployment di una applicazione scritta in Ruby on Rails.
Cosa cambia rispetto a prima? Beh, se Passenger si rivelasse davvero stabile e veloce (almeno) quanto la classica configurazione “mongrel + apache” le cose potrebbero cambiare drasticamente almeno dal punto di vista della diffusione di Rails. Passenger non è altro che un modulo per Apache…
Potrebbe voler dire “dimenticarsi” di mongrel e delle varie fasi di setup, dimenticarsi dell’eccessivo uso di ram e magari iniziare a trovare il logo di supporto rails anche sui siti di provider economici.

Come ti reinvento la ruota…
La cosa che mi stava di più a cuore era proprio il consumo talvolta eccessivo di memoria delle mie applicazioni rails e pare che i ragazzi di Phusion avessero la mia stessa preoccupazione. Il progetto ha infatti come scopo, oltre a quello della semplificazione del deployment, quello di limitare la fame di memoria del nostro framework.
Quando si visita una pagina qualsiasi della nostra applicazione, Passenger verifica che sia già in esecuzione una istanza della stessa e la richiama. In caso contrario la carica al volo.
I tempi di attesa però sono ridottissimi perché l’intero framework Rails viene caricato una sola volta (e rimane attivo) per poter essere condiviso anche con altre applicazioni in esecuzione sullo stesso server.
Come se non bastasse l’applicazione viene killata se non viene utilizzata per 120 secondi liberando ulteriore preziosissima (e cara $$$) memoria. Hanno reinventato la ruota!!

Per concludere mi auguro che mod_rails si diffonda velocemente e viste le premesse credo sarà quantomeno interessante seguirne gli sviluppi.

Attualmente lo sto testando sui miei server con varie applicazioni e il tutto sembra funzionare con ottime prestazioni.

Per qualsiasi informazione vi rimando al sito originale:

www.modrails.com

A breve un piccolo tutorial sull’utilizzo pratico.

A presto