Mettre à jour Magento n’est pas toujours une chose facile, dans cette article, je vais vous montrer la manière dont je m’y suis pris pour passer d’une version 1.4.0.1 vers la dernière version à l’heure ou j’écris, à savoir la 1.6.2.0.
Préparer le terrain…
Il faut tout d’abord récupérer la version de votre site en production (la 1.4) pour la dupliquer sur un serveur ou en local.
Dans un terminal vous pouvez faire :
Sur le serveur de production:
|
1 2 |
mysqldump -h localhost -p bdd > mage.sql
tar -cvf mage.tar ./magento mage.sql |
Sur le serveur local:
|
1 2 3 4 5 6 |
mkdir currentmage
cd currentmage
wget http://domaine.tld/mage.tar
tar -xvf mage.tar
rm -rf ./var/cache ./var/session
mkdir newmage |
A ce stade, nous avons la copie des fichiers de la version de production dans le dossier “currentmage“.
Il faut maintenant mettre en place la base de données. Si vous avez suivi les commandes plus haut, nous avons fait un dump de la base. Allons donc dans phpMyAdmin pour créer une base de données que nous allons nommer “newmage“.
Retour dans notre terminal pour insérer notre dump..
Toujours sur le serveur local:
|
1 |
mysql -h localhost -u user -p currentmage < mage.sql |
Nous retournons ensuite dans phpMyAdmin afin de modifier le base_url de magento présent dans la table "core_config_data". Ce que je fais un général, c'est une recherche sur le champs "path" avec un like% sur "secure". Deux entrées doivent ressortir, il faut donc les éditer pour mettre l'url local de notre magento. Par exemple "newmage.mondomaine.tld". Si vous n'avez pas de sous-domaine sous la main, il est tout à fait possible de faire de modifier votre fichier hosts pour que la résolution DNS soit faites. Attention, si vous travaillez sur un serveur distant, Magento vérifiera la résolution du domaine, il faut donc modifier également le hosts du serveur.
Maintenant que le terrain est prêt, nous allons pouvoir mettre à jour Magento !
Récupérons tout d'abord la dernière version de Magento
Serveur local:
|
1 2 3 4 5 6 7 8 |
cd newmage
wget http://www.magentocommerce.com/downloads/assets/1.6.2.0/magento-1.6.2.0.tar.gz
tar -zxvf magento-1.6.2.0.tar.gz
mv magento/* magento/.htaccess .
chmod -R o+w media var
chmod o+w app/etc
rm -rf magento/ magento-1.6.2.0.tar.gz
cp ../currentmage/app/etc/local.xml ./app/etc/ |
N'oubliez pas que le fichier local.xml provient normalement de votre site de production, il faut donc l'éditer pour modifier les informations de connexion et mettre ceux de la base de données "newmage“.
Une fois que c’est fait, il n’y à plus qu’à se rendre sur l’url qui pointe vers le dossier “currentmage“.
Si tout se passe bien, Magento devrais mettre à niveau la base de données et vous n’aurez plus qu’à copier votre thème sur la nouvelle installation, vérifier que tout se passe bien et remettre en production…
Il se peut que la MAJ prenne beaucoup de temps ou que MySQL bloque sur un process “copy tmp table”. ce que vous pouvez faire dans ce cas c’est:
- Stopper Mysql
- Monter un fichier en TMFS ->
mkdir /var/tmpfs
mount -t tmpfs -o size=2G tmpfs /var/tmpfs/
- Copier le datadir de MySQL dans /var/tmpfs/ -> cp -Rvf /var/lib/mysql /var/tmpfs
- Modifier la directive data_dir dans le my.cnf pour y mettre le chemin /var/tmpfs/mysql
- Redémarrer ensuite MySQL
Attention, ne faites pas cette modification sur un serveur MySQL contenant des données critiques ou des sites en production. si le serveur redémarre, le fichier /var/tmpfs sera vidé et la différence entre les données de /var/lib/mysql et /var/tmpfs sera perdue !
Après cette modification, retenter la MAJ comme en pointant sur l’url de “newmage”.
Pour vérifier le temps d’exécution des requêtes et s’assurer que la MAJ se passe bien, vous pouvez vous connectez à mysql et faire un SHOW PROCESSLIST;
Si tout se passe bien, les requêtes devraient défiler (pas très très vite…)
.
Il se peut également que vous obteniez cette erreur: Duplicate entry ’0-2981′ for key ‘UNQ_BY_CUSTOMER’
si c’est le cas, éditez le fichier app/etc/config.xml pour remplacer le noeud XML suivant:
par:
Et enfin, relancer encore la MAJ… Cette fois, elle devrait passer !