web-dev-qa-db-fra.com

Fichiers de migration - génération de scripts de migration SQL post-mise à jour

Je recherche un moyen organisé d'exécuter les mises à jour de joomla localement, puis de mettre à jour les systèmes de production au moyen de migrations de déploiement de code + db, de sorte que je n'ai pas à mettre à jour joomla en production ni à désactiver le site lors de l'exécution des mises à jour. Le composant de mise à jour en cours utilise une fonction spécifique pour exécuter les mises à jour SQL

https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_joomlaupdate/models/default.php#L515

Dans finaliseUpgrade, il semble qu’il faut extraire/analyser certaines requêtes et les appliquer au schéma. Si je comprends bien, il passe en revue les scripts/espaces réservés de com_admin/sql/{DBType}/*. Sql en détectant toutes les nouvelles versions des fichiers SQL à exécuter sur la base de données.

Le problème avec ces scripts est que je ne vois pas comment les utiliser comme outil de migration pour ma base de production car ils sont préfixés par des tables et je préférerais de loin un seul script de migration consolidé.

Pourriez-vous suggérer si joomla écrit réellement les modifications qu'il a effectuées quelque part dans un fichier de migration?

Le fichier logs/joomla_update.php contient quelques traces des modifications, mais celles-ci sont tronquées car apparemment, il n'enregistre que quelques caractères.

Toute suggestion est très appréciée.

3
Bizmate

Deux scénarios:

développement, mise en scène, production

La production est en lecture seule, le stade est l'endroit où le contenu est préparé et les tests effectués. Joomla est toujours mis à jour sur Staging, puis la base de données est enregistrée avec le commit, puis restaurée à la production.

développement, mise en scène, production

Le contenu est édité sur Production. Les mises à jour de Joomla sont effectuées sur Staging. Une fois que vous les poussez, allez simplement à extensions/database et appuyez sur Fix. Autrement, pour les gros serveurs, automatisez-le avec un plugin système (écrivez un plugin qui écoute certains paramètres dans onAfterRoute, vérifiez s'il s'agit d'un appel local ($ _SERVER ['REMOTE_ADDR'] = '127.0.0.1' et planifiez un travail cron invoquez-le).

Mise à jour

Pour effectuer les mises à jour de base de données après chaque mise à niveau de version, vous avez deux possibilités:

Automatique

Allez dans administrateur - extensions - gestionnaire d’extensions, cliquez sur la base de données à gauche, puis sur "Corriger" en haut.

Si cette page contient des erreurs (cas de la mise à niveau de la version 2.5 à la version 3.3), essayez d’aller directement à l’URL:

/administrator/index.php?option=com_installer&view=database

Manuel

Lorsque ce qui précède échoue, (voir aussi le commentaire de @ Diego ci-dessous):

 find administrator/components/com_admin/sql/updates/mysql/3*.sql | grep mysql > 33.listsql

et fitler les fichiers pertinents (les versions concernées sont dans le nom du fichier)

Ensuite, à condition que j25 soit votre préfixe de base de données

cat 33.listsql | xargs cat > 33.sql
sed -i 's/#_/j25/' 33.sql
mysql -u user --password="somepass" dbname < 33.sql
1
Riccardo Zorn