Un po’ per i problemi con mod_ruby, un po’ per la curiosità troppo forte ho iniziato a provare [Rails][1], il potente framework per la programmazione web.
L’installazione l’ho fatta tramite [Ruby Gems][2] e l’unico problema che mi ha dato ( su Debian e non su Mandriva) è stato il fatto che lo script rails per creare una nuova applicazione non era nella cartella giusta, e quindi il comando all’inizio non funzionava.
Ecco il comando per installare Ruby via Gems:
gem install rails --include-dependencies
Le applicazioni Rails saranno in /var/rails/.
Ecco passo per passo il primo programma fatto in Rails, una classica applicazione in stile Hello World.
Creiamo l’applicazione Rails:
<br />
nathan:/var/rails# rails hello_bonzo<br />
create<br />
create app/controllers<br />
create app/helpers<br />
create app/models<br />
create app/views/layouts<br />
create config/environments<br />
create components<br />
create db<br />
create doc<br />
create lib<br />
create lib/tasks<br />
create log<br />
create public/images<br />
create public/javascripts<br />
create public/stylesheets<br />
create script/performance<br />
create script/process<br />
create test/fixtures<br />
create test/functional<br />
create test/integration<br />
create test/mocks/development<br />
create test/mocks/test<br />
create test/unit<br />
create vendor<br />
create vendor/plugins<br />
create tmp/sessions<br />
create tmp/sockets<br />
create tmp/cache<br />
create tmp/pids<br />
create Rakefile<br />
create README<br />
create app/controllers/application.rb<br />
create app/helpers/application_helper.rb<br />
create test/test_helper.rb<br />
create config/database.yml<br />
create config/routes.rb<br />
create public/.htaccess<br />
create config/boot.rb<br />
create config/environment.rb<br />
create config/environments/production.rb<br />
create config/environments/development.rb<br />
create config/environments/test.rb<br />
create script/about<br />
create script/breakpointer<br />
create script/console<br />
create script/destroy<br />
create script/generate<br />
create script/performance/benchmarker<br />
create script/performance/profiler<br />
create script/process/reaper<br />
create script/process/spawner<br />
create script/process/inspector<br />
create script/runner<br />
create script/server<br />
create script/plugin<br />
create public/dispatch.rb<br />
create public/dispatch.cgi<br />
create public/dispatch.fcgi<br />
create public/404.html<br />
create public/500.html<br />
create public/index.html<br />
create public/favicon.ico<br />
create public/robots.txt<br />
create public/images/rails.png<br />
create public/javascripts/prototype.js<br />
create public/javascripts/effects.js<br />
create public/javascripts/dragdrop.js<br />
create public/javascripts/controls.js<br />
create public/javascripts/application.js<br />
create doc/README_FOR_APP<br />
create log/server.log<br />
create log/production.log<br />
create log/development.log<br />
create log/test.log<br />
Il comando rails crea la struttura dell’applicazione hello_bonzo creando una serie di cartelle e file.
Creiamo un controller vuoto:
nathan:/var/rails# cd hello_bonzo/<br />
nathan:/var/rails/hello_bonzo# script/generate controller Hello_bonzo<br />
exists app/controllers/<br />
exists app/helpers/<br />
create app/views/hello_bonzo<br />
exists test/functional/<br />
create app/controllers/hello_bonzo_controller.rb<br />
create test/functional/hello_bonzo_controller_test.rb<br />
create app/helpers/hello_bonzo_helper.rb<br />
Abbiamo creato un controller vuoto, il file:
var/rails/hello_bonzo/apps/controller/hello_bonzo_controller.rb
che contiene questo codice:
<br />
class HelloBonzoController < ApplicationController<br />
end
Proviamo a vedere l’applicazione lanciando il server integrato.
Ecco il risultato:
<br />
nathan:/var/rails/hello_bonzo# script/server<br />
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)<br />
=> Rails application starting on http://0.0.0.0:3000<br />
=> Call with -d to detach<br />
=> Ctrl-C to shutdown server<br />
** Ruby version is not up-to-date; loading cgi_multipart_eof_fix<br />
** Starting Mongrel listening at 0.0.0.0:3000<br />
** Starting Rails with development environment...<br />
** Rails loaded.<br />
** Loading any Rails specific GemPlugins<br />
** Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).<br />
** Rails signals registered. HUP => reload (without restart). It might not work well.<br />
** Mongrel available at 0.0.0.0:3000<br />
** Use CTRL-C to stop.<br />
Per me parte [Mongrel][3] perché l’ho installato (gem install mongrel
), se no di default partirebbe webrick, il server integrato.
Vado alla pagina con porta 3000:
http://0.0.0.0:3000/hello_bonzo
Mi dice:
Unknown action
No action responded to index
non c’è metodo all’azione index
Creo il metodo index rendendo così il controller:
<br />
class HelloBonzoController < ApplicationController<br />
def index<br />
end<br />
end
Richiamo la pagina:
Template is missing
Missing template script/../config/../app/views/hello_bonzo/index.rhtml
Manca la view.
Creo il file:
/var/rails/app/views/hello_bonzo/index.rhtml
Nel file scrivo:
`<html>
<body></p>
Hello Bonzo
oggi è: <%= @time %>
<%= link_to "Goodbye", :action => "goodbye" %>
</body>
</html>
`
(ilcodice html viene interpretato dal browser, quindi sul post non riuscite a vederlo, dovete vedere il sorgente della pagina)
Per usare time inserisco nel metodo index del controller la riga:
`@time = Time.now`
se ricarico la pagina ho:
> Hello Bonzo
>
> oggi è: Sun Sep 02 23:43:01 +0200 2007
>
> Goodbye
Trasformo così il controller aggiungendo il metodo goodbye:
`
class HelloBonzoController < ApplicationController
def index
@time = Time.now
end
def goodbye
end
end
`
Nella cartella /app/views/hello_bonzo
Metto il file goodbye.rhtml:
`
Goodbye Bonzo
Grazie di essere passato da noi
<%= link_to "Hello Bonzo", :action => "index" %>
</body>
</html>
`
Alla fine avrò una semplice applicazione in cui ho due pagine collegate tra loro da un link.
Per ora non è molto, ma intanto comincio a prendere confidenza con Ruby, Rails e MVC.
Gabba Gabba Hey
Bonzo