Le applicazioni sviluppate con Rails hanno una peculiarità, ovvero sono tutte organizzate secondo una struttura comune. Questo è una conseguenza del fatto che il comando rails
genera in automaticamente una serie di directory e file che forniscono una certa linea guida nello sviluppo, linea che se rispettata permette a Rails di effettuare molte cose automaticamente (ad esempio caricare i file, generarli ed individuarli a runtime e molto altro). Questa struttura comune permette anche di comprendere con semplicità il codice di progetti realizzati da altri, in quanto sono organizzati nella stessa maniera. Vediamo nel dettaglio il significato delle varie directory e dei file che contengono.
App
È il cuore dell'applicazione, quella che contiene il codice specializzato per l'applicazione web. All'interno di essa esistono 4 sottodirectory, ovvero controllers
, models
, views
e helpers
. Ognuna di questa cartella contiene un file per ogni elemento concettuale dell'applicazione, affronteremo nel dettaglio il significato di ognuno di essi nei prossimi capitoli. Per ora limitatevi a pensare che i modelli sono gli oggetti con cui si lavora (Persone, Articoli), le viste sono le singole pagine HTML, i controller sono quello che c'è in mezzo e gli helper sono piccoli metodi che aiutano a creare le viste.
Components
Contiene componenti di alto livello riutilizzabili da diverse applicazioni, ad esempio si potrebbe avere un componente per gestire il login condiviso tra più applicazioni. In realtà i componenti vengono usati molto raramente perché Rails fornisce meccanismi migliori per rendere il codice riutilizzabile, e sono sostanzialmente deprecati.
Config
Inizialmente questa directory contiene informazioni relative a tre cose: gli environment, i dati di connessione al database e le route.
Gli environment sono una caratteristica di Rails particolarmente utile, in quanto permettono di utilizzare una stessa applicazione in tre modalità differenti, ovvero development, production e test. Questo perché un'applicazione Rails dovrebbe tipicamente essere sviluppata in questo modo, usando un database per lo sviluppo, uno per i test ed uno invece per quando l'applicazione è pronta ad essere aperta agli utenti finali.
Questi tre ambienti hanno caratteristiche predefinite differenti e possono essere configurati indipendentemente per usare ad esempio diversi database o abilitando e disabilitando l'autenticazione, attivando il caching delle pagine o dei file eccetera. Per configurare nel dettaglio ogni ambiente si deve intervenire sul file config/environment/nomeambiente.rb, mentre per configurazione condivise andrebbe modificato il file config/environment.rb
. Nel corso di questa guida non interverremo su questi file, ed useremo sempre l'ambiente di sviluppo, che è quello predefinito.
Le opzioni di accesso al database vengono invece controllate da un singolo file, config/database.yml
che è scritto in formato YAML ed ha tre blocchi di questo tipo:
nomeambiente:
adapter: mysql
database: applicazione_nomeambiente
username: nome
password: pass
host: localhost
A seconda del database che decidete di usare potrete usare opzioni differenti (ad esempio, SQLite è un database file based, e non ha bisogno di host, username e password). Nel prossimo capitolo vedremo un esempio di configurazione.
Il file routes.rb
contiene infine le associazioni tra un URL ed una determinata azione. Lavorando su questo file è possibile ad esempio far sì che un URL come http://foo.com/pages/title richiami il metodo search()
della classe PagesController
con argomento "title"
, oppure il metodo title()
della classe PageManager
, o altro.
Esso contiene delle associazioni predefinite per cui accedendo a /pages/view/name
si richiama il metodo view sul controller PagesController
con argomento "name"
, ma potete modificare questa associazione di default se lo volete, o se è necessario per ottenere degli url migliori, in modo simile a quanto si fa con apache e mod_rewrite.
Db
In questa directory verranno mantenute informazioni sul database, listati SQL e codice ruby relativo alle migration. Le migration sono una potentissima funzionalità di Rails tramite le quali è possibile effettuare modifiche incrementali al proprio database facendolo evolvere col tempo, e con la possibilità aggiuntiva di poter andare indietro nel tempo se lo si desidera.
Doc
Il luogo dove raccogliere la documentazione relativa al progetto, inizialmente contiene solo un file "README" di default.
Lib
Le funzionalità non prettamente legate al lato web dell'applicazione vanno inserite in questa directory. Ad esempio se avete un modulo per convertire dei dati o per effettuare calcoli, o per interagire con sistemi esterni, questo è il posto in cui mantenerla. In generale se una cosa non è un modello, controller, helper o vista, va messa in lib.
Log
Contiene i log del webserver.