web-dev-qa-db-fra.com

Déploiement de changements complexes

Il est parfois nécessaire de déployer des modifications assez complexes sur un site Web, ce qui nécessite des modifications des bases de données (tables nouvelles ou modifiées) et du code source dynamique (tel que PHP ou ColdFusion). Quel est le meilleur moyen de regrouper et de déployer rapidement ces modifications sans tout casser sur le site Web en direct?

4
Justin Scott

Réponse courte: c'est une douleur au cou!

J'ai eu à le faire plusieurs fois (et chaque fois, cela me donne envie de penser davantage à ma conception lors de mon prochain projet). Ce que je fais est de fourrer la base de code dans une section de développement (ou un dossier, un serveur, etc.) afin que je puisse y travailler séparément pour m'assurer que tous les bogues sont supprimés avant de passer au déploiement. Je crée ensuite un script SQL qui a toujours les mêmes deux premières lignes:

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

Cela garantira que le script place tout dans une base de données complètement nouvelle et vide. Le reste du script va recréer toutes les tables que je réutilise de l'ancienne base de données dans la nouvelle. Ensuite, je créerai les nouvelles tables (ou les tables modifiées) dans la nouvelle base de données. Enfin, je déplacerai toutes les données du serveur live vers le serveur de développement. Cela peut prendre beaucoup de temps en fonction de la quantité de données que vous déplacez et de la vitesse à laquelle vous pouvez le déplacer. Je vous recommande donc de bien réfléchir au script car moins vous êtes obligé de l'exécuter, mieux c'est.

Une fois la nouvelle base de données de développement opérationnelle, le reste consiste à créer le nouveau code pour l'utiliser. Une fois cette opération effectuée, le déploiement devrait être relativement facile (bien que prenant éventuellement beaucoup de temps). Utilisez simplement le même script pour copier toutes les nouvelles données réelles dans la nouvelle base de données sur le serveur de déploiement, et copiez tout le nouveau code là-bas, et vous avez terminé!

C'est comme ça que je le fais, et même si c'est pénible, ça marche. S'il y a un meilleur moyen, je serais heureux d'écouter.

pdate: En réponse au commentaire de Tchalvak, oui, j'utilise généralement les éléments suivants pour obtenir toutes les définitions de table sans leurs données réelles:

mysqldump --databases --no-data databaseName > newScript.sql

Je modifierai ensuite ce script comme décrit ci-dessus.

3
Mike

Pour acquérir "la capacité de restauration", je suggère vraiment de faire connaissance (bien) soit git ou Mercurial(systèmes de contrôle de version distribuée) .

L'époque où vous devriez utiliser votre code source dans des fichiers plats est révolue (vous devez maintenant le travailler dans des fichiers plats, mais disposez d'un système de contrôle des modifications très robuste qui les surveille).

2
Kzqai

Je fais généralement (pour les sites de style LAMP):

  1. définissez vos modifications puis écrivez un script pour les appliquer (j'utilise un Makefile).
  2. Test vos modifications sur un échantillon de données représentant l'environnement réel
  3. Test encore pour vous assurer
  4. Donnez-vous un moyen de sortir, avoir la capacité de revenir en arrière

Si vous exécutez un cluster, vous risquez d’avoir de gros problèmes avec l’état du site, les caches, etc.

0
Aiden Bell