Un po’ per i problemi con mod_ruby, un po’ per la curiosità troppo forte ho iniziato a provare Rails, il potente framework per la programmazione web.
L’installazione l’ho fatta tramite Ruby Gems 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:
nathan:/var/rails# rails hello_bonzo
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create components
create db
create doc
create lib
create lib/tasks
create log
create public/images
create public/javascripts
create public/stylesheets
create script/performance
create script/process
create test/fixtures
create test/functional
create test/integration
create test/mocks/development
create test/mocks/test
create test/unit
create vendor
create vendor/plugins
create tmp/sessions
create tmp/sockets
create tmp/cache
create tmp/pids
create Rakefile
create README
create app/controllers/application.rb
create app/helpers/application_helper.rb
create test/test_helper.rb
create config/database.yml
create config/routes.rb
create public/.htaccess
create config/boot.rb
create config/environment.rb
create config/environments/production.rb
create config/environments/development.rb
create config/environments/test.rb
create script/about
create script/breakpointer
create script/console
create script/destroy
create script/generate
create script/performance/benchmarker
create script/performance/profiler
create script/process/reaper
create script/process/spawner
create script/process/inspector
create script/runner
create script/server
create script/plugin
create public/dispatch.rb
create public/dispatch.cgi
create public/dispatch.fcgi
create public/404.html
create public/500.html
create public/index.html
create public/favicon.ico
create public/robots.txt
create public/images/rails.png
create public/javascripts/prototype.js
create public/javascripts/effects.js
create public/javascripts/dragdrop.js
create public/javascripts/controls.js
create public/javascripts/application.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log
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/
nathan:/var/rails/hello_bonzo# script/generate controller Hello_bonzo
exists app/controllers/
exists app/helpers/
create app/views/hello_bonzo
exists test/functional/
create app/controllers/hello_bonzo_controller.rb
create test/functional/hello_bonzo_controller_test.rb
create app/helpers/hello_bonzo_helper.rb
Abbiamo creato un controller vuoto, il file:
var/rails/hello_bonzo/apps/controller/hello_bonzo_controller.rb
che contiene questo codice:
class HelloBonzoController < ApplicationController
end
Proviamo a vedere l'applicazione lanciando il server integrato.
Ecco il risultato:
nathan:/var/rails/hello_bonzo# script/server
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Ruby version is not up-to-date; loading cgi_multipart_eof_fix
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).
** Rails signals registered. HUP => reload (without restart). It might not work well.
** Mongrel available at 0.0.0.0:3000
** Use CTRL-C to stop.
Per me parte Mongrel 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:
class HelloBonzoController < ApplicationController
def index
end
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:
Hello Bonzo
oggi è: <%= @time %>
<%= link_to "Goodbye", :action => "goodbye" %>
(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" %>
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













