L'upgrade di magento ® è un compito che spaventa sia gli utenti sia gli sviluppatori. Una pillola che prima o poi bisogna ingoiare: moduli e template sono realizzati utilizzando sempre l'ultima versione di magento ® e di conseguenza se vogliamo avere un template grafico all'ultimo grido e moduli più performanti dobbiamo aggiornare.
Prima di procedere tengo a precisare che TUTTE le operazioni di seguito descritte devono essere fatte su un ambiente di test. Solo quando siamo sicuri che su una replica esatta del nostro sito l'upgrade è andato a buon fine ci si può lanciare nell'upgrade del sito in produzione. Se procedete direttamente in produzione... beh non venite a lamentarvi. Se non avete un ambiente di test, è giunto il momento di crearlo.

Dicevamo, visto che dobbiamo farlo, cerchiamo di complicarci la vita il meno possibile e soprattutto cerchiamo di rimanere off line per il minor tempo possibile.
Nella mia attività di sviluppatore ho dovuto aggiornare diversi siti anche da versioni molto vecchie di magento ® e veramente le ho provate tutte prima di arrivare a questa procedura.

Nell'ordine:

Upgrade da Connect: non funziona quasi mai a causa delle problematiche relative ai permessi e ad alcuni componenti di php (PEAR, Curl ...)
Upgrade da ssh: si bypassano i problemi relativi ai permessi con un bel chmod 777 a tutto il mondo e con utente sudoer, ma a volte funziona, molte volte no perchè si basa essenzialmente sul versioning del core di magento. In generale la maggior parte delle volte ci ritroviamo con una versione aggiornata a metà, se va bene. Se va male il sito risulterà inaccessibile lato admin, lato frontend o, se siete veramente degli sfigati, entrambi.
Installazione su dir separata: è quella che propongo in questo articolo. Consiste in pratica nell'installare l'ultima versione di magento ® su una dir separata rispetto all'attuale root di magento ®, quindi copiare tutto il contenuto sovrascrivendo la nostra attuale installazione.

Dettaglio delle operazioni
In pratica si devono seguire le istruzioni proposte direttamente dalla wiki di magento ® per l'installazione via ssh ovvero, partendo dall'attuale root di magento

wget http://www.magentocommerce.com/downloads/assets/1.9.1.0/magento-1.9.1.0.tar.gz
tar -zxvf magento-1.9.1.0.tar.gz

quindi abbiamo scompattato la nuova versione all'interno della dir magento ®
a questo punto procediamo con la sovrascrittura della nostra versione installata nell'ambiente.

unalias cp
cp -Rf magento/* .
cp -Rf magento/.htaccess .

se avete un multistore attivo con una configurazione particolare di .htaccess consiglio di fare un backup o di evitare quest'ultimo comando.
Finita la copia rimettiamo i permessi di default per magento ®
chmod -R o+w media var
chmod o+w app/etc

a questo punto siamo pronti per richiamare la home sul browser, collegatevi al sito e andate a prendervi un caffè. Prima però assicuratevi di avere un max execution time bello alto nelle impostazioni di php, diciamo almeno a 600 secondi.
In questa fase infatti magento applica tutte le modifiche al database per renderlo compatibile con la versione corrente.
Quando tornate dal caffè la home del vostro sito dovrebbe già dare mostra di se. Entrate in admin e controllate in basso la versione di magento ®, troverete che il numero di versione è stato aggiornato nel footer.
Adesso è il momento di testare se effettivamente tutto funziona alla grande: tornate sulla home e fate un bel giro per il sito, con tanto di ordine. Se qualcosa non va, uno dei vostri moduli deve essere aggiornato o disabilitato perchè non compatibile.
Al termine del giro rientrare in admin ed entrate nel connect. Cliccando su check for upgrades dovreste visualizzare tutti i moduli che possono essere aggiornati. Per quanto mi riguarda procedo all'aggiornamento solo dello stretto necessario, tipo M2EPro e pochi altri, mentre mi guardo bene dall'aggiornare moduli che impattano sul frontend perchè in generale fanno casino, soprattutto se hanno superato i test.

Segnate tutte le modifiche fatte su un file per ripetere velocemente le operazioni aggiuntive, incrociate le dita, fate un nuovo backup e partite con l'aggiornamento in produzione.

Problemi
Se ci sono problemi ad accedere in admin-> configurazione
entrare in
app/code/core/Mage/GoogleCheckout/etc/
e rimuovere tutti i file tranne config.xml perchè nella maggior parte dei casi è questo modulo che crea problemi.

Su alcuni template il form di login non funziona più, verificate con ispeziona elemento se nel form c'è questo campo nascosto
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
se non c'è aggiungetelo e dovreste loggarvi senza problemi. Consiglio di fare un veloce test anche con gli altri form del sito.