web-dev-qa-db-fra.com

Comment fusionner les modifications d'une copie de développement du site vers le site en direct sans perdre de nouveau contenu?

Quelle est la meilleure procédure pour fusionner le travail effectué sur une copie de développement d'un site avec la copie de production en direct? Souvent, de nombreux nouveaux contenus ont été ajoutés au site depuis le début du développement des nouvelles fonctionnalités. Et la plupart des ajouts à un site impliqueront des modifications de base de données. La copie de nouveaux fichiers est donc facile, mais qu'en est-il de la base de données? Comment fusionner vos modifications avec la base de données de production existante sans perdre le nouveau contenu ajouté depuis la dernière mise à jour du site de production? Y a-t-il des modules qui aident à cela?

40
Chaulky

Pour les types de contenu, les vues et les modifications de structure sur le site de développement, regardez à l'aide de Fonctionnalités pour exporter la base de données en code.

Pour la migration de contenu, il existe de nombreuses options, mais pas une seule solution solide. Un exemple est la Suite de déploiement .

16
budda

J'ai adopté essentiellement deux écoles de pensée ici (une troisième école de pensée, faisant des différences de base de données, je ne discuterai pas parce que la complexité est assez élevée).

1) Déployez en supprimant la base de données de production et en important un mysqldump de la base de données de développement. Facultativement, exécutez au préalable une recherche/remplacement d'expression régulière sur tous les liens absolus codés en dur qui font référence à l'URL de développement dans le vidage SQL. Après avoir importé la base de données dev dans prod, exécutez automatiquement les instructions SQL (généralement via un script) par la suite pour modifier tous les paramètres qui sont différents pour prod que dev (par exemple, vous avez peut-être dans le tableau des variables certains paramètres de connexion pour la connexion aux systèmes externes dont vous avez besoin pour changer pour pointer vers les systèmes externes prod au lieu de la version dev).

2) Utilisez le module Fonctionnalités , comme mentionné par budda, pour les paramètres d'administration, et utilisez le module Node Export pour l'exportation/importation de contenu en combinaison avec Supprimer Tous module. Le workflow est donc:

  1. utiliser node_export et des fonctionnalités pour exporter des nœuds/fonctionnalités vers des fichiers
  2. Contrôle de version en option (et, espérons-le)
  3. Charger des fichiers sur le système prod
  4. Utilisez l'interface drush ou admin pour charger les fonctionnalités
  5. Utilisez drush delete-all ou interface d'administration pour supprimer tous les nœuds des types que vous souhaitez importer
  6. Utilisez drush ne-import ou l'interface d'administration pour importer les nœuds à partir du fichier de nœuds que vous avez exporté.

Une note, je suggère fortement d'adopter un flux de travail standard, où le contenu ne va que dans une seule direction. Soit Dev -> Prod ou Prod -> Dev (je préfère celui-ci).

Je l'ai fait et je le fais sur de gros systèmes, avec des résultats assez bons, mais il y aura toujours de nombreuses façons de découper cette pomme, choisissez celle qui vous convient le mieux.

2
coderintherye

Vider les bases de données de la copie de site en direct et la copie de développement du site dans un fichier SQL (utilisez les mêmes paramètres et paramètres pour les deux vidages).
Ensuite, comparez les deux fichiers SQL à l'aide d'un petit outil de comparaison ExamDiff . Il affichera les différences de fichiers côte à côte avec différentes couleurs. Vous pouvez également accéder directement aux différences (sans faire défiler). Examinez les différences et ajoutez/modifiez des lignes dans le fichier SQL du site en direct. Assurez-vous qu'il n'y a pas de chemin/URL absolu de l'environnement de développement dans ce fichier. Ça c'est fait! Il est temps de restaurer la base de données pour le site en direct.
Facilitez-vous la vie: Dans la première étape, ne sauvegardez que les tables modifiées. Par exemple, si vous avez modifié un module dans une copie de développement qui cible une table distincte, ne sauvegardez que cette table. Si vous n'êtes pas sûr de la table particulière, le vidage de la base de données entière est très bien.

1
user931