Capistrano e dump del Database
Durante lo sviluppo di una applicazione web si ha molto spesso la necessità di effettuare una copia del database utilizzato per lo sviluppo dell’applicazione sul server in cui verrà inserita l’applicazione in produzione. Ruby on Rails ci consente di ricreare automaticamente la struttura del database, ma senza l’importazione dei dati contenuti nel development database. Grazie a Capistrano è possibile interagire molto facilmente tra i vari ambienti di sviluppo (development e production) creando recipe personalizzate che possono svolgere anche noiosi compiti come quello del dump del database.
Vediamo in dettaglio una recipe che consente di:
- Effettuare il dump del database in development (MySQL)
- Impostare il nome corretto del database da creare in production
- Effettuare l’upload del file sql contenente il database sul server su cui verrò fatto il deploy
- Creare il database
- Cancellare i file di appoggio utilizzati per le operazioni
Requisiti
Perché la ricetta funzioni è necessario avere:
- Capistrano installato
- MySQL come database sia sul server di sviluppo che su quello di deploy
- SSH installato sui server e la porta adibita all’SSH apera sul server di deploy
Tutto funziona andando a prelevare le informazioni sul file database.yml, in cui sono presenti nomi del database, nomi utente e password sia per il development database che per il production.
La ricetta
Potete scaricare la ricetta per il capistrano. Vediamo comunque alcune righe del file deploy.rb in dettaglio:
70 # Dump del development database 71 run "mysqldump -u -p --create-options --skip-comments --add-drop-table --default-character-set=UTF8 --database > /tmp/.sql" do |ch, stream, out| 72 ch.send_data "\n" if out =~ /^Enter password:/ 73 end .. 91 # Copio il file contenente il database all'interno del server su cui si creerà il poduction database 92 run "scp /tmp/.sql @:/tmp/.sql " do |ch, stream, out| 93 ch.send_data "yes\n" if out =~ /(yes\/no)/ 94 ch.send_data "\n" if out =~ /password:/ 95 end .. 107 # Effettuo la creazione del Database 108 run "mysql -u -p < /tmp/.sql" do |ch, stream, out| 109 ch.send_data "\n" if out =~ /^Enter password:/ 110 end
- Linee 70-73: Dump del development database
- Linee 91-95: Copia del file contenente il database sul server in cui ricreare il production database
- Linee 107-110: Creazione del production database
Come utilizzarlo
Prima di tutto configurare il file database.yml in modo da avere settato correttamente sia l’ambiente development che il production. Successivamente impostare correttamente all’interno del file deploy.rb:
- il nome dell’applicazione (:application)
- il repositorio (:repository)
- i server da utilizzare (il role db impostato come :primary => true sarà quello dove sarà creato il database, mentre l’altro sarà quello da cui verranno presi struttura e dati).
- l’utente con i diritti di accesso ai server (:user)
- l’indirizzo del server in cui sarà creato il database (uguale a quello impostato sopra nel ruolo, ma necessario per effettuare l’upload del file via ssh)
Da console lanciare il comando:
1 $ cap -a dump_db_to_database_server
Inserire le password che verranno richieste per l’accesso ai server impostati all’interno del file deploy.rb. Al termine dell’esecuzione del task avrete sul server in produzione l’esatta copia del database che avete usato durante lo sviluppo.

