web-dev-qa-db-fra.com

Mise à jour des composants: la fonction de fichier d'erreur de base de données n'a renvoyé aucune erreur

J'ai travaillé sur un composant, mais j'ai remarqué une erreur lors de la mise à jour (par exemple, "Mise à jour des composants: la fonction de fichier d'erreur de la base de données n'a renvoyé aucune erreur", pas exacte mais proche).

Je remarque que cela est dû aux lignes de la table d'extension (uniquement la table d'extension). Les supprimer le corrige. Mais il s’agit en fait de "désinstaller" le composant sans supprimer ses fichiers/données (autres que config), ce n’est donc vraiment pas une option pour effectuer un script de contrôle en amont et le faire lors d’une mise à jour.

En raison de la nature du composant, j'ai une bibliothèque à installer à côté, j'ai donc utilisé l'outil installerscript de F0F (et je l'ai étendu car il ne dispose d'aucune option pour installer des bibliothèques). F0F a une fonction appelée bugfixDBFunctionReturnedNoError() qui corrige l'erreur en utilisant la technique décrite ci-dessus. Cependant, il est fait pour le faire lors de l'installation au cas où il aurait été désinstallé et qu'il resterait quelque chose. Mais j'ai besoin que cela soit fait lors de la mise à jour.

J'ai apporté quelques modifications au script d'installation pour le faire fonctionner également sur la mise à jour et cela fonctionne avec cela. Cependant, ce n’est pas le moyen de contourner ce problème, avez-vous des idées à ce sujet?

2
Jordan Ramstad

Déterminé le problème, lorsque vous créez un composant, vous devez avoir au moins 1 fichier SQL de mise à jour vide, sinon il échouera. Pas seulement le fichier index.html typique pour vous assurer que le programme d'installation ne saute pas le dossier.

Typiquement, le fichier ressemblerait à quelque chose comme sql/updates/mysql/VERSION.sql Remplacement de la version par la version réellement requise. Je suis convaincu que c'est un bogue, il ne devrait pas nécessiter de fichier SQL lors de la mise à jour, mais ce n'est pas urgent s'il en est, que ce soit ou s'il manque quelque chose d'autre.

2
Jordan Ramstad

Je reçois assez souvent cette erreur sur un système de test lorsque j'essaie d'installer un composant qui utilise des mises à jour SQL et provoque la première utilisation d'une erreur (même s'il n'est pas lié à SQL, tel qu'un fichier manquant dans le fichier manifeste).

Voici quelques étapes sur la façon de résoudre ce problème, en désinstallant manuellement le composant, car à partir du gestionnaire d’extension, l’installation peut échouer.

Trouvez l'id de votre extension (vous pouvez également trouver plusieurs entrées)

SELECT * 
FROM  `#__extensions` 
WHERE  `name` LIKE  '%myextensionname%'
LIMIT 0 , 30

Supprimer de #__schemas les entrées pour l'extension , où extension_id est le précédent identifiant trouvé. Supprimez également toutes les entrées pour les extensions non existantes:

Supprimez tous les actifs pour votre extension:

SELECT * 
FROM  `#__assets` 
WHERE  `name` LIKE  '%myextensionname%'
LIMIT 0 , 30

Supprimez toutes les entrées de menu:

SELECT * 
FROM  `#__menu` 
WHERE  `link` LIKE  '%myextensionname%'
LIMIT 0 , 30

Réinstallez.

Note: posté à l'origine sur DONC .

1
Valentin Despa