Settare un semplice progetto con Capistrano
Posted by Dibi Store Fri, 26 Oct 2007 08:02:00 GMT
Capistrano è uno dei migliori (se non il migliore) strumenti per il deployment delle vostre applicazioni web (non solo rails). In questo articolo descriverò le procedure base per attivare un semplice progetto usando Capistrano
E' essenziale seguire le semplice istruzioni per l'installazione nel sito ufficiale in modo da poter essere subito operativi.
Innanzitutto creiamo un progetto con rails, posizioniamoci con la shell nella root directory e digitiamo:
capify .
Questo creerà i files necessari. Ora possiamo sapere tutti i task che abbiamo a disposizione semplicemente con:
cap -T
Che produce questa lista:
cap deploy # Deploys your project.
cap deploy:check # Test deployment dependencies.
cap deploy:cleanup # Clean up old releases.
cap deploy:cold # Deploys and starts a `cold' application.
cap deploy:migrate # Run the migrate rake task.
cap deploy:migrations # Deploy and run pending migrations.
cap deploy:pending # Displays the commits since your last deploy.
cap deploy:pending:diff # Displays the `diff' since your last deploy.
cap deploy:restart # Restarts your application.
cap deploy:rollback # Rolls back to a previous version and restarts.
cap deploy:rollback_code # Rolls back to the previously deployed version.
cap deploy:setup # Prepares one or more servers for deployment.
cap deploy:start # Start the application servers.
cap deploy:stop # Stop the application servers.
cap deploy:symlink # Updates the symlink to the most recently deployed ...
cap deploy:update # Copies your project and updates the symlink.
cap deploy:update_code # Copies your project to the remote servers.
cap deploy:upload # Copy files to the currently deployed version.
cap deploy:web:disable # Present a maintenance page to visitors.
cap deploy:web:enable # Makes the application web-accessible again.
cap invoke # Invoke a single command on the remote servers.
cap shell # Begin an interactive Capistrano session.
Some tasks were not listed, either because they have no description,
or because they are only used internally by other tasks. To see all
tasks, type `cap -Tv'.
Configurazione
Il prossimo passo è quello di impostare i nostri valori nel file /config/deploy.rb ricordandovi che è tutto codice ruby, quindi potete anche impostare variabili nel rispetto del principio DRY:
application = "test_svn"
set :application, application
set :repository, "svn:path/to/remote/svn/#{application}"
# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
# set :deploy_to, "/var/www/#{application}"
# If you aren't using Subversion to manage your source code, specify
# your SCM below:
# set :scm, :subversion
role :app, "www.myapp.com"
role :web, "www.myapp.com"
role :db, "www.myapp.com", :primary => true
L'esempio ci aiuta a capire la configurazione minima necessaria, notiamo che dobbiamo impostare anche l'indirizzo del server, e... leggete i commenti!
Come da documentazione ora dovete agire in base a come gestite il vostro server, per esempio io ho scelto di gestire il tutto con Mongrel, in questo caso, come da manuale, possiamo creare un file in /script/spin dove metteremo le impostazioni:
/path/current/script/process/spawner -p 3000 -i 3
In questo modo impostiamo 3 istanze di mongrel nelle porte (3000 - 3001 - 3002)
Setup
Se avete impostato tutto correttamente, con il prossimo comando capistrano tenterà di connettersi al server, ed eseguire il setup dello stesso:
cap deploy:setup
Se tutto è andato a buon fine ora dobbiamo assicurarci che tutto il software necessario è installato nel nostro server, ed eventualmente installarlo:
cap -q deploy:check
Nella documentazione viene riportato l'esempio di Capistrano che vi dice che non avete installato subversion, ma che invece avete fatto, in questo caso specificate nel file deploy.rb:
set :scm_command, "/opt/local/bin/svn"
Deploy
Il primo deploy è delicato, per qui potete usare questo comando:
cap deploy:cold
Se tutto è andato a buon fine, d'ora in avanti potete usare invece:
cap deploy
Se qualche volta sbagliate e mandate in produzione qualcosa che non doveva andare, possiamo tornare indietro con il comando:
cap deploy:rollback

