velocizzare il deploy con capifony

Come probabilmente saprete, Capifony (per chi non lo conoscesse, è lo standard de facto per gestire i deploy su Symfony2) purtroppo ha un’impostazione predefinita che reinstalla tutti i vendor a ogni deploy. Questo vuol dire che ogni volta che facciamo un deploy dobbiamo aspettare che il server di produzione (o comunque il server su cui stiamo eseguendo il deploy stesso) scarichi da github tutte le librerie necessarie. Ogni volta, anche se molto probabilmente le librerie dei vendor non sono state modificate dal deploy precedente. In realtà, quando anche fossero state modificate, per esempio per un aggiornamento di Symfony, non sarebbe più efficiente scaricare solo le modifiche, piuttosto che tutto quanto? Dopotutto, è esattamente ciò che facciamo sulle nostre macchine di sviluppo.
Ecco una possibile soluzione, da riportare nel proprio file di configurazione deploy.rb.

# app/config/deploy.rb
# [...]
set :vendors_mode, "install"
set :update_vendors, true
before "symfony:vendors:install", "symfony:copy_vendors"
 
namespace :symfony do
  desc "Copy vendors from previous release"
  task :copy_vendors, :except => { :no_release => true } do
    pretty_print "--> Copying vendors from previous release"
    run "cp -a #{previous_release}/vendor/* #{latest_release}/vendor/"
    puts_ok
  end
end

Aggiornamento: il codice, ampliato e migliorato, è stato pubblicato come ricetta sul sito di Capifony.

3 Replies to “velocizzare il deploy con capifony”

  1. Va bene anche quando aggiorni i vendor.
    Potrebbe non andar bene giusto quando togli dei vendor (e non vuoi tenerti le librerie non usate), in quel caso puoi sempre fare un cap symfony:vendors:reinstall

  2. Una nota:

    Per symfony 2.0.x funziona tutto alla grande, ma per symfony 2.1 bisogna sostituire la riga:
    before “symfony:vendors:install”, “symfony:copy_vendors”
    con:
    before “symfony:composer:update”, “symfony:copy_vendors”

    Così funziona anche con composer 😉

Leave a Reply

Your email address will not be published. Required fields are marked *