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

40

Quelle est la meilleure procédure à suivre 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 la base de données. Il est donc facile de copier de nouveaux fichiers, mais qu'en est-il de la base de données? Comment fusionnez-vous 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 at-il des modules qui aident avec cela?

Chaulky
la source
2
Supprimer la confusion: Fusionner et migrer sont deux mots différents. Vous avez utilisé les deux dans votre question. Si le site actif est vide, vous devez migrer la copie de développement vers le site / hôte actif. Si le site actif contient déjà du contenu, il est nécessaire de fusionner le nouveau contenu de la copie de développement vers le site actif (la fusion est quelque peu difficile). Que devez-vous faire?
user931

Réponses:

16

Pour les types de contenu, les vues et les modifications de structure sur le site dev, examinez l'utilisation 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 .

budda
la source
la suite Demployment a définitivement l’air intéressante, même si elle est toujours en développement (pas même une version bêta pour le moment). Avez-vous utilisé vous-même? Savez-vous quelque chose qu'il ne couvrirait pas?
Chaulky
2

J'ai adopté fondamentalement deux écoles de pensée ici (une 3ème école de pensée, faisant des bases de données, je ne discuterai pas parce que la complexité est assez grande).

1) Déployez en supprimant la base de données de production et en important un mysqldump de la base de développement. Vous pouvez éventuellement exécuter au préalable une expression rationnelle recherchée / remplacée sur les liens absolus codés en dur qui font référence à l'URL dev dans la sauvegarde 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) pour modifier tout paramètre différent de prod (par exemple, vous avez peut-être dans la table des variables certains paramètres de connexion nécessaires pour la connexion à des systèmes externes). changez pour pointer sur les systèmes externes prod au lieu de la version dev).

2) Utilisez le module Features , comme indiqué par budda, pour les paramètres d’administration, et utilisez le module Node Export pour l’exportation / importation de contenu en combinaison avec le module Delete All . Le flux de travail est donc:

  1. utiliser node_export et fonctionnalités pour exporter des nœuds / fonctionnalités vers des fichiers
  2. Contrôle de version optionnel (et j'espère)
  3. Charger des fichiers sur le système de production
  4. Utilisez drush ou l'interface d'administration pour charger les fonctionnalités
  5. Utilisez drush delete-all ou l'interface d'administration pour supprimer tous les noeuds des types à 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 un sens. Dev -> Prod ou Prod -> Dev (je préfère celui-ci).

Je l’ai fait, et je le fais sur certains grands systèmes, avec d’assez bons résultats, mais il y aura toujours plusieurs façons de trancher cette pomme, de choisir celle qui vous convient le mieux.

coderintherye
la source
Dans l'option 1, comment recréez-vous le contenu ajouté au site actif qui ne se trouve pas sur le site dev? On dirait que vous écrasez tout cela avec la base de données dev et que vous modifiez peut-être certains paramètres / variables. En outre, quelle école de pensée utilisez-vous actuellement sur vos sites? Des avantages et des inconvénients à chaque approche?
Chaulky
Dans l'option 1, nous utilisons maintenant node_export pour envoyer régulièrement le contenu (après avoir supprimé le contenu précédent). Nous avions l'habitude de modifier le contenu de dev et de prod. C’est en fait un scénario courant à quelques endroits que j’ai vu, bien que ce ne soit évidemment pas idéal. C’est la raison pour laquelle j’ajoute, adopte une direction et la respecte, que le contenu soit dev -> prod ou prod -> dev, mais que l’on ne fasse pas les deux. Et oui, nous écrasons fondamentalement, bien que plus comme effacer et reconstruire. Dans mon nouvel emploi, nous occupons le poste n ° 2. À mon ancien poste, nous avons occupé le poste n ° 1, mais nous passons au poste n ° 2 (je les consulte toujours).
coderintherye
1

Dump des bases de données de copie de site et de développement de site en direct dans un fichier SQL (utilisez les mêmes paramètres et paramètres pour les deux vidages).
Ensuite, comparez les deux fichiers SQL en utilisant un petit outil de comparaison, ExamDiff . Il affichera les différences de fichiers côte à côte avec différentes couleurs. Vous pouvez aussi sauter directement aux différences (sans défilement). Examinez les différences et ajoutez / modifiez des lignes dans le fichier SQL du site actif. 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 actif.
Facilitez-vous la vie:Dans un premier temps, ne sauvegardez que les tables modifiées. Par exemple, si vous avez modifié un module dans la copie de développement qui cible une table distincte, exportez uniquement cette table. Si vous n'êtes pas sûr d'une table en particulier, tout le dump de la base de données est correct.

utilisateur931
la source
Cette technique a de graves limitations dans certaines circonstances importantes. Par exemple, si le site de développement a de nouveaux nœuds, vos deux bases de données contiendront toutes les deux des entrées avec les mêmes identifiants de nœud. Il sera impossible de résoudre les références et de les fusionner à partir d'un cliché de la base de données SQL. Ce type d'opération est mieux géré via les fonctionnalités et le déploiement, comme indiqué dans d'autres réponses.
greg_1_anderson