Nous utilisons actuellement un référentiel SVN pour vous assurer que les environnements locaux de tous sont tenus à jour. Toutefois, le développement du site Web de Drupal est quelque peu plus délicieux dans le fait que tout code personnalisé que vous écrivez (par exemple, le code PHP écrit pour un corps de nœud) est stocké dans la base de données et les modifications ne sont pas reconnues par la copie de travail SVN. P>
Il existe un couple de développeurs qui travaillent actuellement sur la même zone d'un site de Drupal, mais nous sommes incertains sur la manière de fusionner la meilleure façon de modifier la base de données Drupal locale. L'engagement des correctifs de butées de base de données semblent maladroit au mieux et est probablement inefficace et susceptible d'erreurs à cet effet. P>
Toute suggestion sur la manière d'approcher cette question est appréciée! p>
4 Réponses :
En commettant des correctifs de décharges de base de données, voulez-vous prendre un extrait entier de la DB et la commémorer après chaque changement? P>
Que diriez-vous d'une copie principale de la base de données? Extraire toutes les tables, vues, SPS, etc ... dans des fichiers individuels, mettez-les dans SVN et effectuez vos modifications de fusion sur les objets individuels? P>
Oui, voulait prendre un extrait complet de la base de données. La sortie de ce fichier de vidage dépend vraiment de la manière dont le développeur spécifie les arguments de sortie (certains peuvent demander une chute si elles n'existent pas, ou des commentaires à inclure, par exemple), ce n'est donc pas très fiable. L'extraction de chaque table semble un peu trop fastidieuse pour ce qu'elle vaut et vient avec les mêmes problèmes d'incohérence.
Je stimulerais la normalisation de la manière dont vous extrayez les scripts - par exemple, ayez toujours une chute si elle existe des déclarations d'autorisation, formatage standard. De plus, si vous avez vos objets scripts individuellement et que Devs validez tous les objets liés à un changement d'un commit, il devient plus gérable. Je suppose que lorsque vous vous engagez et que vous faites vos résolves, vous regardez dans un grand fichier et que vous faites beaucoup de défilement. Lorsque vous travaillez avec des fichiers individuels, cela force votre objectif sur une chose. Vous n'avez besoin que de tout extraire une fois, au dernier état de production de travail et travaillez à partir de là.
Si vous mettez du code PHP dans votre base de données, vous le faites mal. Certaines choses sont à l'intérieur de la base de données comme des vues et des champs CCK, ainsi que des paramètres. Mais si vous mettez du code PHP à l'intérieur du corps du nœud, vous créez un gros problème de maintenance de code. Vous devriez vraiment utiliser l'API et les crochets à la place. Créez des modules à la place des hacks laids avec EVAL, etc. P>
Bonne suggestion, merci. Toutefois, cela laisse toujours la question ouverte sur la manière dont vous fusionneriez d'autres modifications de base de données que les développeurs apportent dans leurs environnements locaux (tels que l'ajout de champs CCK ou de paramètres de nœud) avant que le total ne va en direct sur une base de données centrale. Le code PHP personnalisé est l'un des rares types d'entrée intégrés à Drupal (accordé que vous pouvez le désactiver dans Drupal 6), ce qui suggère qu'il s'agit d'une caractéristique plus flexible de ce CMS qu'un piratage laid.
Il existe pour un travail rapide et sale, mais est généralement considéré comme une mauvaise idée - tout le code Eval'D doit être évité. Le problème que vous rencontrez est un cas parfait. C'est une bonne fonctionnalité - c'est bon pour des expériences rapides et un bâtiment CCK / Vues Vous savez que vous exporterez et exécuterez en tant que code de fichier plat.
Malheureusement, le déploiement de la base de données / la mise à jour est l'une des taches de drupes faibles. Voir Cette question et réponses ainsi que Celui-ci Pour certaines suggestions sur la manière de le gérer. P>
Quant à la CCK, vous pouvez trouver des astuces Voici . P>
Quant au code PHP dans le contenu, je suis d'accord avec Googletorp dans lequel vous devriez éviter de faire cela. Cependant, si pour une raison quelconque, vous devez absolument le faire, vous pouvez essayer de réduire le code à un appel de fonction simple. Ainsi, vous auriez la fonction elle-même dans un module (et cela serait suivi via SVN). Mais alors vous n'êtes qu'à une petite étape de la suppression de la nécessité du code en ligne de toute façon ... p>
Tout ce qui a été dit ci-dessus est vrai et bon conseil. Pour répondre à votre question pratique, il existe un certain nombre de modules récents que vous pourriez utiliser pour transporter les modifications apportées par les différents développeurs. p>
Les modules "fonctionnalités" sont une guérison du problème décrit de Drupal fournissant souvent de belles fonctionnalités, mais stockant des lots de configuration et de structure dans la DB. Ce module vous permet de capturer une fonctionnalité et de la sortir en tant que pseudo-module (qualifiée sous forme de module avec .info et fichiers de code et tous). Voici comment ça marche: p>
Et vous pouvez dire à votre patron que vous avez tout fait manuellement avec Razor COOP pour éviter une erreur même;) J'espère que cela aide - http://drupal.org/project/features P>