Fusion de SPIP

Importer et fusionner tout le contenu d’un autre site : textes, images, auteurs, liens, et sans se mélanger les pinceaux.

Ce plugin permet d’importer tous les contenus d’un site source, en évitant les conflits d’identifiants qu’une simple copie générerait inévitablement.

Cette fonctionnalité existait pour SPIP2, mais n’a pas été portée sur SPIP3.

Ce plugin est une réécriture complète, avec une analyse automatique de la structure de la base de données.

Qu’est ce qui est importé par ce plugin ?

À peu près tout :

-  les objets natifs : articles, rubriques, auteurs, mots clés... ainsi que les objets éditoriaux s’ils existent dans les deux sites,

-  les documents, images et logos (en option),

-  les associations entre objets (auteurs -> articles, articles -> documents...),

-  les liens internes (ex : [->artXX]) et les identifiants dans les modèles (ex : <embXX>) sont mis à jour,

-  les champs extra s’ils ont été déclarés sur les deux sites,

-  les tables et les données des plugins qui sont installés sur les deux sites (formulaires, agendas, accès restreint...).

Avertissement

Il est très fortement conseillé de réaliser une sauvegarde de votre site avant de réaliser une fusion : le plugin est testé et fonctionnel mais l’opération de fusion est irréversible.

Sauvegardez la base de données et le répertoire IMG du site hôte

En cas d’erreur, on peut ainsi redémarrer depuis la sauvegarde.

L’import des documents et images de la source ne vérifie pas si des fichiers du même nom dans le /IMG de l’hôte existent déjà. Si jamais c’est le cas, ces derniers seraient écrasés.

Pour des bases de données très volumineuses, le processus peut être long et nécessiter beaucoup de ressources. Le processus de fusion peut échouer sur un hébergement mutualisé.

1 - Déclarer une base externe

Sur le site hôte (celui qui reçoit l’import), il faut commencer par déclarer la base de données source (celle qui va être importée) comme une base de données externe.
Dans le bandeau principal, « Maintenance » -> « Maintenance technique », puis choisir « Déclarer une autre base ».
Lors de l’étape « Déclarer une autre base (3/3) Indiquez le nom utilisé pour ce serveur » utilisez un nom commençant par connect_

Si le site source utilise une base de données Mysql, indiquer simplement les paramètres de connexion à la base : serveur, utilisateur, mot de passe, nom de la base [1].

Si le site source utilise une base de données sqlite, copiez le fichier .sqlite de la base (que vous trouverez dans le répertoire /config/bases/ du site source) au même endroit dans le site hôte (dans /config/bases/ donc).
Rechargez la page « Déclarer une autre base », votre base source devrait apparaître.

Les sauvegardes de SPIP sont au format sqlite, on peut donc aussi importer une sauvegarde d’un autre site : pour ça il faut copier la sauvegarde du site source (qu’on trouve dans /tmp/dump) dans le répertoire /config/bases/ du site hôte.

La base de données source doit être dans la même version que la base hôte, dans le cas contraire un avertissement sera lancé lors de la fusion, à vous de confirmer la fusion.

Si les différences de versions sont mineures, le risque d’erreur est faible [2].
Sinon, faites une mise à jour du site source, avec spip_loader c’est rapide et sans douleur.

Problèmes d’encodage

Dans certains cas, il a été signalé un problème d’encodage qui tronquait les titres et les textes dès le premier accent ou caractère étendu.
Dans ce cas, il suffit d’ajouter cette ligne à la fin du fichier de connexion associé à la base source (dans /connect) :
mysql_query("SET NAMES 'utf8'");

2 - Démarrer la fusion

Le plugin s’installe dans le menu « Maintenance » du bandeau principal.
Par défaut, seuls les webmestres y ont accès.

Interface du plugin fusion

Choisissez la base de données à importer.

Les documents et logos du site source peuvent aussi être importés si on déclare leur chemin physique. Dans ce cas, il faut réaliser l’opération de fusion sur le même serveur (sur votre poste en local, ou sur un serveur en ligne).

Le site source peut être importé dans un secteur en particulier, ou bien à la racine du site.

En option, vous pouvez choisir de ne pas importer les statistiques et les referrers. Ces tables peuvent être très volumineuses et longues à traiter dans certains cas, et vous n’en avez peut être pas besoin.

Au démarrage de la fusion, le plugin peut vous remonter plusieurs avertissements :
-  versions de bases de données différentes (cf plus haut)
-  certaines tables ou certains champs n’ont pas été trouvés dans la base source

Ce deuxième cas peut se produire si des plugins du site hôte ne sont pas installés dans le site source, ou bien si le site hôte comporte certains champs spécifiques (champs extra) qui ne sont pas présents dans le site source.
C’est un simple message pour vous prévenir que les données de ces plugins seront ignorées, cela ne causera pas d’erreurs particulières, vous pouvez confirmer et continuer.

Exemple :

Exemple d’alerte (tables introuvables)

Ici, le plugin formidable est installé sur le site hôte, mais il ne l’est pas sur le site source. Le plugin prévient que ses tables n’ont pas été trouvées sur le site source.
C’est juste un rappel, cela ne causera pas d’erreurs particulières, vous pouvez confirmer et continuer.

NB : Quand vous lancerez l’opération de fusion, vous ne verrez aucun indicateur visuel de la progression en cours, vous verrez juste l’indicateur visuel du navigateur qui indique un chargement de page.
Ne relancez pas l’opération en cliquant plusieurs fois sur le bouton !

Complément : fonctionnement technique

Le code s’appuie entièrement sur les schémas de l’hôte déclarés dans lister_tables_principales() et lister_tables_auxiliaires() pour un traitement automatisé, quel que soit le schéma de la base (plugins installés). Les clés primaires et les liaisons sont découvertes d’après les schémas pour les mises à jour [3]

Après avoir déclaré une base externe, l’import d’un site se fait en plusieurs temps :

-  les tables principales de la source sont importées ligne par ligne sans leur clé primaire. Les objets changent donc d’identifiant, mais une table d’assemblage (spip_fusion) enregistre l’id original, l’id final, le type d’objet, et la base source.

-  les liaisons entre objets sont reconstruites en reconnaissant automatiquement les clés primaires dans chaque table.

-  les tables auxiliaires sont importées, en modifiant les clés primaires qui pointent sur des objets principaux.

-  les documents et logos sont importés (si on précise le chemin absolu du répertoire IMG source). Les logos sont renommés avec les nouveaux identifiants des objets auxquels ils sont rattachés.
NB : Les logos pris en compte sont ceux des articles, des rubriques, des auteurs, des mots clés et des brèves (extensible facilement)

-  les identifiants dans liens internes ->artXX ->XX -rubXX etc sont mis à jour pour pointer sur les nouveaux identifiants.

-  les identifiants dans les modèles (img, doc, emb) sont mis à jour de la même façon.

Astuce : passer son site de sqlite à mysql

Si vous avez créé votre site avec une base de données en sqlite, et que pour diverses raisons vous voulez le passer en mysql, il n’y a pas vraiment d’outil le permettant facilement.

Mais avec ce plugin, c’est possible et même très simple :

  1. dans le répertoire /config, supprimer le fichier connect.php,
  2. vider complètement le contenu de /tmp (pour rebooter Spip)
  3. appeler l’url /ecrire pour relancer l’installation, choisir cette fois une base mysql,
  4. une fois le site installé en mysql, aller dans « Maintenance » / « Maintenance technique », et suivre les 3 étapes de « Déclarer une autre base » : choisir Sqlite3, sur l’écran suivant choisir la base sqlite existante, et valider jusqu’à « La nouvelle base a bien été déclarée ... » (cf paragraphe « 1 - Déclarer une base externe » ),
  5. lancer la fusion en choisissant comme source la base sqlite,
  6. « boire une bière et savourer la satisfaction d’un plan qui s’est déroulé sans accroc » (© b_b).

A noter que cette astuce marche aussi dans l’autre sens : passer de Mysql à sqlite, mais le besoin a été moins souvent exprimé.

Important : Les objets (articles, rubriques etc) vont changer de numéro en passant d’une base de données à l’autre. Si vos squelettes utilisent des numéros « en dur », il faudra les mettre à jour.

Notes

[1En cas d’utilisation d’un préfixe non standard, vous référer à la note en PS ci-dessous.

[2À titre d’exemple, j’ai importé sans erreur une base de démarrage au format SPIP 3.0.5 (http://contrib.spip.net/Base-de-donnees-de-test-pour-SPIP3) sur un SPIP 3.0.13

[3à part un ou deux cas particuliers sur les urls et les forums notamment

PS : Quand on déclare une nouvelle base qui possède des tables préfixées (avec un préfixe différent de spip_, l’interface ne propose pas d’indiquer le préfixe : il faut éditer après coup le fichier créé dans /config, manuellement par FTP dans le fichier secondaire de connexion source et l’ajouter dans le paramètre suivant le type de la base de données.

Discussion

35 discussions

  • 4

    j’ai suivi pas à pas la démarche mais ma base finale est toujours lite et non mysql.
    merci de m’indiquer ou est le pb

    • Tu as suivi la procédure pour passer de sqlite à Mysql ? ou l’inverse ?

      Et que contient le fichier /config/connect.php ?

      Attention : il y a un mot de passe dans ce fichier, ne le colle pas ici publiquement tel quel

    • j’ai spip 3.1 et si je passe en 3.2 j’ai une erreur
      donc l’idée c’est faire passer ma base sqlite vers mysql
      j’ai suivi ce protocole
      De SQLite a MySQL & Inversement grâce au plugin Fusion
      -  
      je n’ai pas de fichier connect.php
      -  
      A la fin ma base est toujours en sqlite et chaque article est répété 3 fois ????

    • Si tu suis la procédure en 5 points, après le point 3 (connexion à la base mysql) tu dois avoir un fichier /config/connect.php qui se crée.

      Sinon c’est qu’il y a un problème et la suite ne peux pas marcher.

      A la fin ma base est toujours en sqlite et chaque article est répété 3 fois ????

      Tu avais bien fait une sauvegarde de ta base sqlite avant ?
      Si oui, tu remets ce fichier en place pour repartir.

    • si j’ai un fichier connect.php

      <?php
      if (!defined("_ECRIRE_INC_VERSION")) return;
      defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);
      $GLOBALS['spip_connect_version'] = 0.8;
      spip_connect_db('mybase.mysql.db','','userndo','mdp','userpar','mysql', 'spip','','utf8');
      

    Répondre à ce message

  • 6

    Bonjour,
    je bute sur une erreur 504, peut-on relancer la fusion (reprise) ou ce n’est pas prévu ?
    Clt

    • Un timeout ça peut arriver oui, si la base est volumineuse ou le serveur pas trop véloce...

      A titre de prévention il y a deux ini_set : https://git.spip.net/spip-contrib-extensions/fusion_spip/src/commit/25fda79936df3b831af5cd557e4fa2d6d5cd8fdd/formulaires/fusion_spip.php#L128
      mais ça ne marche pas partout.

      Et non, il n’y a pas encore de traitement par lot qui permettrait de reprendre le traitement.
      Il y a une table spip_fusion_spip qui est mise à jour au fur et à mesure du traitement des bases, mais je ne sais pas si ça pourrait suffire à « redémarrer » un traitement sans risquer de créer des doublons. Il faudrait s’y repencher mais ce n’est pas dans mes priorités actuelles.

      Dans les cas désespérés, il m’est arrivé de faire la fusion sur un autre serveur que celui où le site est hébergé (ou en local), si vraiment il n’y arrive pas, puis de retransférer un dump des sites fusionnés.

    • Et non, il n’y a pas encore de traitement par lot qui permettrait de reprendre le traitement.

      trop tard, J’ai testé !
      un clic est si vite arrivé... :-)

      A titre de prévention il y a deux ini_set

      je suis pas dev :
      ça se règle comment ?

      Si spip retrouve ses petits en rapatriant les doc après, je peux le faire en deux temps car avec 2,5Go c’est le gros du volume, (la base étant riquiqui)
      Dans le pire des cas, je travaillerai sur une copie du site de départ après avoir donné un « coup de balai* » pour l’alléger au lieu de le donner après fusion

      * bon plugin complémentaire à fusion

    • Bonjour,
      Bon, en 2021, c’est passé, en 2023, ça casse
      J’ai tout transféré chez mon hébergeur, là pas d’erreur 504, juste le foutoir
      tous les objets sont bien créés (auteurs, articles, rubriques, documents...
      Pas de lien auteurs/article
      toutes les rubriques avec la même id parent, y compris la rubrique parent elle même ???
      tous les id secteurs à 0
      toutes les profondeurs à 5
      Pas de log « fusion »

    • Petites précisions pour d’éventuels visiteurs :
      Il s’agissait de SPIP 3.2.19
      -  Je suppose (peut être à tort) que les modifs de 2022 ont cassé quelque chose pour la version 3.2, mais comme elle n’est plus maintenue, cela n’a pas d’importance.
      -  En l’absence d’explications, je n’ai pas pu tester les init_set

      Il semble également, « d’après internet » que les réglages de timeout peuvent être modifiés sur le serveur apache ou pris en compte par le programme pour traiter par « petits lots » afin de les éviter.
      Mais bon, on voit tout et n’importe quoi sur internet et je suis pas dev :
      je ne peux donc pas valider la véracité de ces informations, ni les tester ;-)
      Clt

    • Salut,

      effectivement les traitements peuvent être longs si la base est volumineuse (je parle bien de la taille de la base de données, pas du « poids » du site lui même avec ses documents et tout).

      D’où les deux directives « ini_set », qui sont là pour tenter de corriger le problème de la durée du traitement, mais en fonction de l’hébergement et de la configuration PHP elles ne sont pas toujours effectives.

      Si tu as la main sur le php.ini ou équivalent (la configuration de PHP) sur ton serveur, tu peux tenter d’y modifier la config de limite de mémoire et de limite de temps (cf documentations de ton hébergement).
      Mais c’est tellement dépendant de l’hébergement qu’il me serait impossible de documenter tous les cas possibles.

      Et sinon sur le fond de ta question :

      Je suppose (peut être à tort) que les modifs de 2022 ont cassé quelque chose pour la version 3.2

      le plugin est censé fonctionner aussi bien sur SPIP 3.2 que 4 voir 4.2

    • Bonjour nicod_
      Comme je ne sait pas comment paramétrer ces « Init_set », je n’ai pas pu tester

      Comme spécifié,
      En 2021 aucun problème de timeout avec une base similaire (et un serveur local asthmatique)
      En 2023 chez mon hébergeur, aucun timeout, aucune erreur apparente, mais le résultat indiqué.
      Après, je ne fait qu’établir un constat sur mon cas perso et un spip 3.2 basique

      je parle bien de la taille de la base de données

      Coté base de données, il est fort heureux qu’on n’a plus à utiliser le terminal pour sauvegarder/ restaurer etc ;-)
      Perso, je me contente de comparer des enregistrements et d’essayer d’en tirer une logique à partir du résultat visuel dans spip
      La base faisait 3, 8Mo , j’ignore si c’est « gros »
      Je suis descendu à seulement 20 articles mais sur mon serveur local, le timeout existait toujours...
      toutefois il y avait les bonnes liaisons
      Du coup, j’y suis allé par paquets de 20 avec pour conséquences de nombreuses duplications de données (auteurs, rubriques principales).
      Après la 2e passe un ancien collègue a déterminé les requêtes pour recoller le tout à chaque passe
      Il me suffisait ensuite de détruire les enregistrements en surnombre.

      tu peux tenter d’y modifier la config de limite de mémoire et de limite de temps

      J’ai indiqué ce que j’avais « trouvé », uniquement comme piste de travail pour des utilisateurs aguerris qui auraient les mêmes problèmes que moi.
      Comme je te l’ai déjà dis je ne suis pas dev, c’est l’avantage de choisir un CMS et des pluging spécialisés :
      Faire quelque chose de basique sans avoir à connaitre quoi que ce soit en informatique

      Cordialement

    Répondre à ce message

  • Bonjour,

    pour info sur un environnement spip 4.2.4 la migration sqlite => mysql c’est bien passé et ma permis de résoudre

    https://discuter.spip.net/t/passage-4-2-3-a-4-2-4-probleme-espace-prive/171113/3

    ps/ j’avais du changer les bornes du paquet.xml
    compatibilite=« [3.0.0 ;4.1.*] » ===> compatibilite=« [3.0.0 ;4.2.*] »

    Répondre à ce message

  • 2

    Après fusion est-il possible de savoir quels objets (auteurs, rubriques, articles) proviennent de la source et lesquels sont issus de l’hôte ?

    • Toutes les opérations de fusion sont inscrites dans la table spip_fusion_spip, avec une ligne par donnée importée : le nom du site source, le type d’objet (article, auteur, etc), l’identifiant (numéro) d’origine et le nouvel identifiant après import.

      Il y a aussi une entrée dans le menu « Maintenance » qui permet de retrouver un objet par son id d’origine ou final, qui utilise justement cette table, mais ça ne donne pas une liste complète (qui pourrait être très longue et pas forcément utile).

    • Merci pour cette réponse détaillée !

    Répondre à ce message

  • 1

    Que se passe-t-il lorsque il existe deux utilisateurs (éditeur, contributeur) avec un même login sur chacune des installations à fusionner ?
    Est-ce qu’à l’arrivée on a un seul utilisateur qui reste auteurs des tous les articles provenant des deux sites ?
    Est-ce que l’on a deux utilisateurs différents ?
    Est-ce que les auteurs ne sont pas recréés ?

    • Les auteurs du site source sont importés tels quels.
      S’il y a un auteur sur le site source avec le même login que celui du site hôte, il apparaitra donc deux fois, avec le même login mais avec un identifiant (numéro) différent.
      Les liens de cet auteur importé (articles, etc) seront aussi importés dans les tables spip_*_liens, avec ce nouvel identifiant.
      Le plugin ne gère pas la consolidation (fusion) des auteurs ayant un même login.

    Répondre à ce message

  • Bonjour,
    J’ai un problème dès le 1/3, la déclaration de la base : « Il y a 1 erreur dans votre saisie, veuillez vérifier les informations. ».
    J’ai réessayé plusieurs fois, avec les champs que j’avais sauvegardés, avec les champs dans connect.php, à chaque fois j’ai cette erreur, qui n’est pas détaillée.
    Les deux sites sont sous la même version de SPIP.
    Une idée ?
    Merci beaucoup.

    Répondre à ce message

  • 8

    Salut,

    mysql_query() est supprimée en PHP 7.0 : https://www.php.net/manual/fr/function.mysql-query.php

    après quelques recherches, il semble conseillé d’utiliser mysqli_set_charset :

    C’est la meilleure façon de modifier le jeu de caractères. Il n’est pas recommandé d’utiliser la fonction mysqli_query() pour le définir (comme avec la requête SET NAMES utf8).

    Voir la 2e note https://www.php.net/manual/fr/mysqli.set-charset.php#refsect1-mysqli.set-charset-notes

    Quelle est la syntaxe a utiliser du coup ?

    Merci

    • J’imagine qu’il faut utiliser la syntaxe conseillée, non ? ^^
      Enfin, en fonction de la version de PHP.
      Et du coup, mettre à jour la doc du plugin si tu me confirmes que ça marche bien.

    • Ça serait avec joie mais le truc, c’est que je trouve pas la bonne syntaxe du coup :)

      La doc PHP indique :

      mysqli_set_charset ( mysqli $link , string $charset )

      quand la doc du plugin indique :

      mysql_query("SET NAMES 'utf8'");

      Et je ne vois pas comment faire la conversion malgré mes recherches (j’ai tenté plusieurs trucs mais j’ai toujours des erreurs :( )

    • Le $link en question est à priori dans le tableau $GLOBALS[’connexions’], qui stocke en globale tous les liens mysqli ouverts.

      L’index 0 est le lien principal (celui déclaré dans /config/connect.php), il faut juste réussir à trouver le bon index dans le fichier connect de la base source...

    • hum... c’est la partie après le juste qui me pose problème :

      trouver le bon index dans le fichier connect de la base source

      Ca doit dévoiler un peu mon faible niveau en PHP :)

    • Je ne crois pas que ce soit la bonne piste en fait, il n’y a rien dans $GLOBALS[’connexions’] à cette étape là. Faudrait que je creuse un peu...

    • Bon, j’ai repassé l’hébergement en PHP 5.6 pour pouvoir utiliser mysql_query() mais j’ai toujours un problème de caractères, notamment avec des émojis dans le texte, par ex 📣 (no comment, je ne suis pas rédacteur du site ^^).
      Les accents, eux, semblent bien passer...

    • Ça doit venir d’un problème d’encodage de la base / des tables.

      https://stackoverflow.com/questions/39463134/how-to-store-emoji-character-in-mysql-database

      1) Database : Change Database default collation as utf8mb4.

      2) Table : Change table collation as CHARACTER SET utf8mb4 COLLATE utf8mb4_bin.

      Query : ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

      (pour toutes les tables donc, enfin au moins spip_articles et quelques autres)

    • j’ai essayé dans phpMyAdmin

      ALTER TABLE spip_articles CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

      mais j’ai une erreur

      #1067 - Valeur par défaut invalide pour 'date'

      J’ai donc changé manuellement dans mon fichier sql cible (j’ai une sauvegarde d’un SPIP vide avec juste la config de base pour ne pas avoir à tout reprendre à chaque fois), avant import dans phpMyAdmin

      ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin;

      du coup, les émojis sont remplacés en bases par des ????.

      La base, elle, est bien en : https://pic.infini.fr/YGvbsafJ/buEtM73S.png

      Bref, on n’est pas sorti des ronces !

    Répondre à ce message

  • 8
    olivier

    Bonjour,
    Existe-t-il un plugin ou un moyen, après la fusion, pour fusionner les auteurs et pour « creer » des liens de traductions ?

    J’ai fusionné deux sites, un en francais et un an anglais, qui étaient en sqlite sur deux domaines différents, vers un seul site sur mysql.
    Comment puis-je lier les articles traduits un à un ? (une vingtaine : je peux le faire à la main)

    Je dois aussi fusionner les auteurs en double.

    • olivier

      pour les auteurs, le plugin RAO devrait faire l’affaire

    • RAO ? Kézako ?

      Pour la fusion des auteurs, j’y ai déjà pensé et c’est en projet, j’essaierai de développer quelque chose si je trouve un peu de temps pour le faire.

      Par contre, pour lier les articles des deux sites, je ne vois pas trop comment faire : comment savoir qu’un article est une traduction d’un autre ?
      Le multilinguisme peut être géré de tellement de façons différentes que ça me parait difficile de trouver une solution générique.

    • olivier

      plugin Réassocier auteurs objets (RAO) : ça a bien marché

      Multilinguisme : ok. je vais essayer de me baser sur la table qui gère les liens de traduction entre articles, et la modifier à la main.
      par exemple : depuis un article X, créer une traduction de cet article (l’entrée id_article_Y dans la table est créée) ; puis modifier la base pour remplacer id_article_Y par id_article_Z ; et enfin mettre article Y à la poubelle.

    • Ah super, je ne connaissais pas ce plugin.
      On en apprend tous les jours avec SPIP :)

      Pour le multilinguisme, qu’on se comprenne bien : dans les deux sites de départ, tu n’avais pas de liens de traductions ? ou bien ils ont été perdus après la fusion ?

    • olivier

      tout à fait, il n’y avait pas de liens de traduction (2 spips distincts). Il faut les recréer.

    • olivier

      les créer, plutôt

    • olivier

      pour conclure, la procédure de création des liens de traduction a posteriori fut assez facile à faire à la main.
      Sur un bout de papier, noter les id des articles de référence, et les articles traduits à associer.
      Dans phpMyAdmin (la première fois que je l’utilisai), via mon hébergeur ovh, il suffit de regarder la table spip_articles. il y a une colonne id_trad, qui vaut zéro par défaut.

      Il suffit de remplacer « 0 » par le numero de l’article de référence de la traduction.
      ex : si l’article en anglais n°4 doit correspondre à l’article en français n°76, alors
      il faut mettre « 4 » dans la colonne id_trad sur la ligne de l’article 4 et sur celle de l’article 76

    • Parfait, content que tu t’en sois sorti, et merci pour le lien vers le plugin RAO :)

    Répondre à ce message

  • 8

    Bonjour, je travaille « en local » (Linux Ubuntu) sur un serveur Apache, et j’utilise la mutualisation de Spip. Les deux sites que je cherche à fusionner sont donc sur le même serveur, et utilisent le même serveur MySql.
    J’ai bien déclaré ma base de donnée source comme base externe de mon site hôte.
    Or, lorsque je lance la fusion, je reçois le message suivant :

    Le site hôte et le site source ne sont pas dans la même version de base de données :
    - hôte est en version 23375
    - source est en version 

    Le message d’erreur n’en dit pas plus.
    Pour moi, la version de base de données est la même, puisque les deux bases sont sur le même serveur. Qu’est-ce que j’ai raté ?
    Merci,
    Eric LM

    • Les bases peuvent être sur le même serveur, mais ne pas correspondrent à la même version de SPIP (c’est ce que dit le message, même si bizarre qu’il aille plus loin).

      Sans connaitre le plugin je dirais : s’assurer d’avoir la même version sur les deux sites avant de tenter la fusion.

    • Bonjour Maïeul, les deux sites sont sous la même version de Spip, puisque j’utilise la mutualisation. Ils sont tous les deux sous Spip 3.2.7 [24472]

    • aucune idée alors :(

    • Bonjour,

      c’est une erreur qui apparait quand la clé version_installee ne peut pas être lue (ou est vide) dans la table spip_meta du site source.

      J’ai mis à jour le plugin pour que cette erreur ne soit plus bloquante, elle génère maintenant uniquement un avertissement qu’il suffit de confirmer.

      La nouvelle version 1.3.4 devrait être disponible rapidement dans les mises à jour des plugins (d’ici quelques heures au maximum), sinon elle est déjà disponible ici en ZIP : https://git.spip.net/spip-contrib-extensions/fusion_spip/releases

    • Un grand merci ! Je vais tester cela demain mercredi, et je reviens vers vous. Bonne journée !

    • Bonjour nicod_ merci pour la mise à jour. En fait, ça n’a pas fonctionné (cf copie d’écran). Mais j’ai ajouté la valeur version_installee dans la table spip_meta, avec comme valeur celle indiquée pour mon site hôte (23375) j’ai relancé l’importation, et celle-ci s’est bien déroulée. Je pense avoir tout récupéré.
      Merci encore,
      Eric LM

    • Merci pour le retour.
      D’après ce que je vois sur la capture écran, en fait il fallait juste cocher « Confirmer la fusion » pour poursuivre sans tenir compte de cette erreur.
      Mais bon, au moins le message d’erreur est plus explicite maintenant, et ça t’a permis de t’en sortir, c’est parfait.

    • Ah... désolé ! Mais oui, le message est plus explicite. A bientôt !

    Répondre à ce message

  • 2

    bonjour,
    j’ai des sites sous SPIP 3.2.7 [24473] , et pas de « Maintenance » -> « Maintenance technique », puis choisir « Déclarer une autre base ». mais « Maintenance » -> « Maintenance technique »,
    Réparer la base de données !!
    Comment fait-on SVp ?

    • Bonjour,
      tu es bien webmestre du site ?
      (à vérifier dans « Mes informations personnelles »)

    • bonjour,
      absolument : cela dit :
      "AUTEUR NUMÉRO 1
      Je suis administrateur
      Je suis webmestre
      Je gère toutes les rubriques"

      MAIS sur 3 sites en config et versions identiques, sur 2 je n’ai pas cette commande visuellement (« Déclarer une autre base ». ) et seul 1 site l’a (mais celui sur lequel je n’ai pas besoin de faire la manœuvre). Stable non ? Ce n’est donc pas le critère "webmestre" seul qui conditionne l’accès à cette commande ! Lequel alors ?

    Répondre à ce message

  • 4

    Voulant migrer un site de sqlite à mysql, j’ai voulu pour cela me servir de "fusion".
    J’ai donc effacé le connect.php, laissé spip initialiser sa bdd sur une toute nouvelle base mysql puis déclaré la base sqlite comme base externe.

    Au moment de lancer la fusion j’ai toutefois un message d’erreur :
    "Le site hôte et le site source ne sont pas dans la même version de base de données : hôte est en version 23375 / source est en version » (sans indication)
    Pourtant c’est le même spip, sans upgrade entre temps ; la connexion à la base externe-interne sqlite semble bien se faire puisque l’exécution est bien arrivée jusque là, et lorsque avec adminer je vérifie la table spip_meta de la bdd sqlite, je vois que l’entrée "version_installee" vaut la même valeur 23375.

    Faute de parvenir à franchir cette étape, je supprime le test du source et je relance la fusion.
    Là ça importe bien, jusquà ce qu’une erreur de syntaxe sql soit signalée :

    Erreur SQL HY000 / 1 near ",": syntax error SELECT id_objet, objet FROM spip_seo WHERE id_objet, objet, meta_name = 0
    plugins/auto/fusion_spip/v1.3.3/inc/fusion_spip.php	fusion_spip_mettre_a_jour_liaisons_par_objet_dist(){ sql_fetsel(); }	398

    Je vois quand même que plein de contenu a déjà été importé : articles : 2724 - auteurs : 472 - documents : 6407 - evenements : 345 - formulaires : 1 - formulaires_reponses : 122 - formulaires_reponses_chams : 1051 - forums : 1813 - groupes_mots : 7 - mailshots : 197 - mailsubscribers : 1381 - mailsubscribinglists : 3 - menus : 2 - menus_entrees : 9 - messages : 281 - mots : 74 - newsletters : 233 - noisettes : 183 - partageurs : 4 - rubriques : 3 - seo : 5 - syndic : 16 - syndic_articles : 114 - zones : 1

    Comment cela se fèce t-il ?

    • Salut,

      Faute de parvenir à franchir cette étape, je supprime le test du source et je relance la fusion.

      Pas compris ce point là, tu peux expliquer ?

      Sinon, il faudrait que tu puisses me fournir la base sqlite utilisée pour pouvoir reproduire l’erreur, mais elle vient de id_objet, objet dans la clause WHERE.

    • -  Erreur de version de bdd : J’avais vérifié dans le code que le connect était bien renseigné ici. J’ai aussi essayé en simplifiant via un sql_getfetsel (sait on jamais...), sans succés. Pour désamorcer l’erreur de version de bdd j’ai finalement contourné le test en le commentant :

      /* else { $vsource = sql_fetsel('valeur', 'spip_meta', 'nom="version_installee"', '', '', '', '', $connect); if ($spip_version_base != $vsource['valeur']) { $erreurs['versions_bases'] = _T('fusion_spip:erreur_versions', array( 'vhote'=>$spip_version_base, 'vsource'=>$vsource['valeur'] ));}} */

      -  Je vois avec les collègues pour te transmettre la BDD.

    • Je crois que j’ai pigé le probleme final avec la table spip_seo : c’est que la primary est composée : « PRIMARY id_objet,objet,meta_name » et le test « id_objet,objet,meta_name=12345 » déconne.

    • J’ai reformulé la réponse anté-précédente pour plus de clarté.

      Une fois la fusion réalisée, les tables principales étaient bien importées : articles et rubriques et j’ai pu tester le site. J’ai alors constaté que les articles s’affichaient bien, mais *sans* la mise en page gérée par le noisetier. Pourtant le feedback indiquait que 183 noisettes avaient été importées. Je ne connais pas le noisetier, mais peut être lui faut il d’autres tables encore ? Ou recalcul. Groumpf, j’ai pas pensé à recalcul...

      Mais toutes les tables n’ont visiblement pas été importées : les statistiques par exemple.

    Répondre à ce message

  • 4

    Bonjour, je suis la procédure de déclaration de base en ajoutant connect_ à l’étape 3
    ça me confirme que la base est déclarée mais rien n’apparaît dans le menu déroulant ensuite.
    j’ai fais 3 fois l’essai et les noms s’accumulent mais toujours rien.
    Où s’inscrivent les infos et que puis je faire ?
    Merci d’avance

    • Désolé de la réponse tardive.
      Est ce que ton problème a été résolu ?

    • non, je n’ai pas réussi

    • Tu tentes une fusion de deux bases MySql ?
      Sur la page « Déclarer une autre base », tu vois bien la ou les bases externes déclarées ?
      Tu peux faire une capture écran ?

    • J’ai essayé à plusieurs reprises, j’arrive visiblement à créer une base (vu que j’ai du donner plusieurs noms « nom existe déjà ») mais impossible de voir quoi que ce soit ensuite.
      Où sont écris les infos du plugin car je me retrouve avec une base de données de plus de 100 mo, c’est carrément bizarre.
      Le problème c’est que c’était un peu urgent et maintenant j’ai pas mal avancé sur le nouveau site, à voir comment réagencer propre...

    Répondre à ce message

  • Bonjour ,
    Je suis sur spip 3.2.1 en sqlite hébergé chez ovh .
    Mon site www.amis-robespierre.org
    J’ai suivi scrupuleusement les procédures indiquées pour passer mon site de sqlite en mysql
    j’ai donc créé une base au préfixe spip.
    -  Au moment de renommer le site j’ai choisi un nouveau nom d’utilisateur et un nouveau login et mdp
    -  d’abord en local et j’ai appelé le chemin absolu pour le dossier IMG dont j’ai laissé les droits ouverts.
    Le transfert s’est effectué sans problème : résultat impeccable logos rubriques et articles identiques.
    -  j’ai procédé de même sur le site à distance.
    Au moment d’indiquer le chemin pour IMG : "/www/IMG la procédure m’indique :
    le répertoire IMG n’existe pas.
    Et le transfert n’est pas bon erreur 1064 à l’ouverture du site et pas d’images dans les articles.
    J’ai indiqué le chemin aussi par copié-collé. Qui peut me dire comment indiquer le chemin absolu d’un dossier du site origine distant le même que celui hôte ?

    Répondre à ce message

  • 5

    Impossible de vérifier la version de la base de données importée

    Bonsoir,
    Les deux sites sont à jour de la même version de spip 3.0.21 via le spip_loader.
    Pourtant j’ai ce message d’erreur :

    Impossible de vérifier la version de la base de données importée (table spip_meta)..

    A la lecture de la table meta de chaque site je vois une différence : base_version        62712 sur l’une et pas sur l’autre.

    Ou bien cela pourrait-il être lié au fait que mes tables n’ont pas le préfixe de spip mais de « public » dans un cas et de « membres » dans l’autre cas ?

    Que me suggérez-vous ?

    Merci

    • J’ai le même soucis.

    • Bonjour,

      le même souci c’est à dire ?
      Deux bases avec des préfixes différents ?
      Je ne crois pas avoir testé ce cas, je ne sais pas si quelqu’un a un retour là dessus.

      Si le problème est là, tu peux déjà vérifier que le préfixe soit bien configuré dans le connect de la base source (pas hôte).

      Ensuite :

      • faire un dump sql de la base source ,
      • chercher/remplacer prefixe_ parspip_ dans ce dump (avec le caractère backquote ` pour bien cibler les noms de tables),
      • remonter ce dump dans une autre base,
      • déclarer cette nouvelle base comme source (qui aura donc le préfixe spip_) et relancer la fusion.

      Pour la meta base_version, elle n’est pas utilisé, c’est version_installee qui est utilisée pour une comparaison.

      Mais le message d’erreur indique effectivement un échec de connexion/lecture de la table spip_meta de la base source.

    • Effectivement c’est le préfixe qui posait problème. J’ai mis le même partout et c’est tout bon :) Merci !

    • Pour info, la version 1.3.3 devrait fonctionner avec les tables préfixées.
      Une étape supplémentaire : éditer le fichier créé dans /config après avoir déclaré la table externe pour ajouter le préfixe.

    • Bonsoir,

      Je viens de réussir une fusion entre deux spip-3.2.1-mysql tous les deux préfixés sur deux serveurs mutualisés OVH ; à part l’obligation d’aller modifier manuellement le fichier de connexion auxiliaire source (comme bien signalé dans l’article), cela semble être très bien passé...

      La seule chose à faire : transporter par FTP (transfert en mode binaire) l’arborescence ./IMG de l’ancien site vers un ./ING du nouveau, et vérifier en y collant un fichier realpath.php le chemin réel à donner en paramètre :

      <?php
      echo realpath('.');

      Une astuce complémentaire : l’administration avancée des mots-clés permet de fusionner, dissocier et/ou ré-associer les mots-clés issus des deux sites fusionnés... Super !!

      Enfin, il semblerait que la ré-indexation du contenu textuel des articles se fasse plus lentement après l’importation (un coup de « génie » ?) : une meme recherche sur un mot particlier -qui n’existait dans aucun article du site cible- n’a donné des résultats qu’une dizaine de minutes après la fin de l’importation !

      Grand merci pour ce plugin !

      YannX

    Répondre à ce message

  • spipfactory

    Bonsoir,

    Yo nicod_ pour que tu jette un oeil ;)

    Donc j’ai fusionné deux sites, après test et retest (ça veux dire que je reproduis)

    Il s’avère que si l’on créer le secteur avec en première lettre une majuscule (Fusion par exemple), la fusion se réalise a la racine du site et pas dans le secteur désigné.

    par contre si l’on créer le secteur sans majuscule (fusion), la on retrouve bien l’ensemble des donnés dans le secteur.

    Répondre à ce message

  • 2

    Bonjour Nico,

    Pour information, un petit retour d’expérience après avoir migré mon site de SQLite en MySQL en utilisant ton astuce ;-) (spip 3.2)

    -  J’ai noté un potentiel problème : si toute la base a été parfaitement importée, par contre les liens articles/auteurs est perdu. Donc tous les articles se retrouvent maintenant sans auteur.

    -  Bon à savoir : la numérotation des logos d’articles & rubriques n’est pas modifiée par le plugin, ils ne sont donc plus valables avec la nouvelle numérotation

    -  Bon à savoir 2 : avec Noizetier & Aveline, c’est la même chose : les numéros ne sont pas modifiés, toute la structure du site sera donc à refaire.

    En tout cas, c’est un outil génial, merci :-)

    • Salut,

      je n’ai pas restesté une conversion sqlite mysql sur SPIP 3.2, mais les deux problèmes que tu signales ne sont pas normaux.
      Normalement toutes les tables de liens (auteurs_liens) sont mises à jour, et les logos sont renumérotés.
      En tout cas c’est comme ça que ça fonctionne pour « tout le monde » :)

      PS : pour info, tu as à la fin de la fusion une table spip_fusion qui indique les anciens et nouveaux id pour chaque objet, si tu veux recréer ou récupérer des infos dedans.

    • spipfactory

      Pour info passage de sqlite spip 3.1.7 a sqlite spip 3.2 3.2
      afin d’avoir les même version de bdd

      puis passage a mysql sur spip 3.2

      Ras ; bon dieu que c’est efficace ;)

    Répondre à ce message

  • 1

    J’ai deux sites en SPIP 3.1.6 que je veux faire fusionner. J’ai bien suivi la procédure donnée sur cette page (le plugin utilisé est le dernier en 1.3.0 stable). J’ai bien récupéré la base externe, j’ai bien indiqué le secteur d’importation mais quand je lance la fusion j’ai le message :
    — - DEBUT ---
    Site en travaux
    Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de votre compréhension.
    — - FIN ---
    je suis dans le cas où :
    -  le site de destination est en mutualisation SPIP facile
    -  le site d’origine est sous forme de backup SQLite (ce que la doc dit être permis)
    -  je ne cherche pas à récupérer /IMG (que je récupèrerai autrement).
    Merci de vos lumières.

    • Message annulé : il fallait simplement que le nom du fichier commence par connect_
      (Et c’est même marqué dans la doc...)
      Avec toutes les excuses pour bruit inopportun.

    Répondre à ce message

  • NB : Vous devez affecter le nom par défaut « spip » du préfixe des tables des bases de données à fusionner avant d’utiliser le plugin.

    Très bonne contribution !, j’ai réussi à fusionner trois bases de données à la fois sans problème. Milles merci.

    Répondre à ce message

  • 1
    Valéry

    Bonjour

    « L’import des documents et images de la source ne vérifie si des fichiers du même nom dans le /IMG de l’hôte existent déjà, auquel cas ils seraient écrasés. »

    Que se passe-t-il dans le cas de figure des documents pour lesquels il n’existe pas de fichier ?

    Ex. import sur le site hôte d’une base où la table document fait référence à des fichiers qui n’existent pas dans /IMG du site hôte ?

    Suite à une fusion j’ai observé quelque mois plus tard un pdf appelé par
    <\img550>
    sur le site hôte (document créé après la fusion) alors que sur le site importé (qui existe toujours) la même balise avec le même identifiant affiche un jpg. Ce problème semble être la conséquence de la fusion.

    Existe-t-il un mode opératoire permettant d’éviter ce genre de déconvenue ?

    Valéry

    • Bonjour,
      Pour chaque document de la source, le script fait une « bête » copie du fichier de l’IMG source (chemin renseigné dans les paramètres) vers l’IMG hôte.

      Suite à une fusion j’ai observé quelque mois plus tard un pdf appelé par
      <\img550> sur le site hôte (document créé après la fusion) alors que sur le site importé (qui existe toujours) la même balise avec le même identifiant affiche un jpg.

      NB : les objets de la source changent d’identifiants après la fusion, donc le document 550 sur le site hôte après la fusion n’est pas le même que le document 550 du site source.
      Pour creuser un peu, la fusion crée une table de liaison qu’on peut consulter pour voir les transformations d’identifiants de chaque objet importé.

    Répondre à ce message

  • 1

    Bonjour,

    Je teste le plugin avec deux sites en 3.0.20. Lors de la phase de fusion, il m’indique cette erreur tout en haut de la page :

    Warning : file_exists() : open_basedir restriction in effect. File(/var/www/vhosts/le-site-source/httpdocs/IMG/) is not within the allowed path(s) : (/var/www/vhosts/le-site-cible :/tmp :/usr/share/php) in /var/www/vhosts/le-site-cible/httpdocs/plugins/auto/fusion_spip/v1.0.4/formulaires/fusion_spip.php on line 100.

    Et dans le cadre « Fusion de sites Spip », j’ai ce message :

    Erreur lors de la fusion
    • Le répertoire /var/www/vhosts/le-site-source/httpdocs/IMG/ n’existe pas.

    Cela pourrait-il avoir un lien avec une restriction d’accès au dossier IMG sur le serveur source (bien qu’en l’espèce ce dossier soit accessible) ?

    Cordialement,

    Lafontanelle

    • C’est bien un répertoire qui est sur le même serveur ?
      A priori, ça doit être un problème d’accès en lecture, sûrement une restriction d’accès.

      Une solution pourrait être de copier le IMG source dans le répertoire du cite hôte (avec un nom différent, comme IMG_source), pour faire la fusion avec l’import des images, et de le supprimer ensuite.

    Répondre à ce message

  • 5
    Guillaume Blanc

    Bonjour,

    J’ai tenté d’utiliser ce plugin pour passer mon site de sqlite en mysql. Les rapports d’utilisateurs disent que ça marche bien, mais je n’ai pas réussi.

    Je suis sur le même serveur, du coup le nouveau site mysql et l’ancien sqlite sont au même endroit. Le nom de la base est le même ??

    Je déclare ma base sqlite comme base externe, puis je lance la fusion, mais j’obtiens l’erreur : « Impossible de vérifier la version de la base de données importée (table spip_meta) »

    Est-ce que le plugin va bien chercher la base dans config/bases/XXX.sqlite ?

    Merci d’avance pour toute aide rapide !

    site : gblanc.fr
    hébergeur : OVH
    spip 3.0.17

    Guillaume Blanc

    • Guillaume Blanc

      J’ai fini par arriver à quelque chose (attention, la fin de la manip n’est pas indiqué, mon browser donnait une erreur de chargement de la page, mais visiblement des choses se sont passées...)
      Sauf qu’il y a pas mal de ménage à faire dans les rubriques, les articles, les n° sont différents, il y a des doublons...

    • Guillaume Blanc

      Bon, j’ai fini par arriver à quelque chose. Sauf que les n° des articles ont été chamboulés, donc tous les liens aussi. Impossible de tout reconstruire à la main. Tant pis. Dommage. Je reviens à mon sqlite, je trouverai une autre solution.

    • Bonjour,
      effectivement les numéros des articles et des rubriques sont modifiés lorsqu’on fait une fusion.
      Mais tous les liens entres les objets sont mis à jour en conséquence (id_rubrique dans la table spip_articles, etc), donc à part si on utilise des ID en dur dans ses squelettes, ça reste transparent.

    • J’ai ajouté cette précision dans le dernier paragraphe.

    • Guillaume Blanc

      Je ne suis pas sûr de comprendre. J’ai un lien vers un autre article du genre toto qui ne pointait plus du tout sur le bon article. Par ailleurs, je perds les liens externes si les N° sont chamboulés...

    Répondre à ce message

  • 1
    brain_damage

    Je viens de tenter une fusion et tous les champs de la table importer avec des caractère accentué saute.

    -  > Ceci est un champ avec des caracères accentués avec plein de texte aprés
    devient
    -  > Ceci est un champ avec des carac

    SI vous avez une idée ou des suggestions je suis preneur :)

    • brain_damage

      “Dans certains cas, il m’a été signalé un problème d’encodage qui tronquait les titres et les textes dès le premier accent ou caractère étendu.
      Dans ce cas, il suffit d’ajouter cette ligne à la fin du fichier de connexion associé à la base source (dans /connect) :
      mysql_query("SET NAMES ’utf8’") ;”

      Héhé ça marche trés bien en fait, :) ça m’apprendra à lire en diagonale

    Répondre à ce message

  • Bonjour,

    J’ai hérité d’un site Spip3 (hébergé chez Free) avec une base de données SQLite 3. Apparemment le format MySQL serait mieux…

    Donc avec Fusion ça devrait pouvoir le faire malgré que c’est sur le même site et non pas d’un site à l’autre.

    Je résume (pas très rassuré de ce genre de manip’) :
    • Site source -> le fichier « mon_domaine.sqlite » sur mon bureau
    • Chemin physique des documents : -> tmp/dump/
    • Secteur : ->  ?

    Là, le débutant que je suis hésite sur quoi sélectionner comme dossier ?

    Répondre à ce message

  • 1

    Juste un petit retour d’expérience.

    Je viens d’utiliser ce plugin pour repasser un site en MySQL à partir de backup SQlite que le site n’arrivait pas à restaurer (plantage à la moitié de l’importation, des tables manquantes, bizarrement).

    Après avoir testé pas mal de solutions différentes, c’est vraiment ce plugin qui m’a sorti de la panade.

    Merci beaucoup.

    Super boulot.

    • Merci, et content que ça ait pu te dépanner.
      Ce n’était pas le but initial du plugin mais c’est vrai que cette manip marche très bien.

    Répondre à ce message

  • Un petit commentaire après une nuit (bon disons plutôt une longue longue soirée) de galère pour préciser un point qui me semble-t-il était mon problème : il faut que les bases que l’on fusionne soit sur le même « storage engine », donc soit toutes les 2 myISAM (mon cas) soit aussi probablement toutes les 2 innoDB (pas testé).

    J’essayais d’importer une myISAM dans une innoDB, 6 essais infructueux avec corruption de la base hôte ... spip à réinstaller, ...

    Ma base hôte n’avait pas (plus après nettoyage) d’articles (mais un gros paquet de contacts/organisations et de mots-clés) .

    D’un point de vue « logique », je ne suis pas sûr de comprendre pourquoi (on fait des requêtes SQL donc ...), la preuve étant que certains se servent du plugin pour passer de SQLite à mySQL, je ne referai pas une 7 ème tentative pour tester un contre-exemple, mais bon, mon commentaire pourrait être une piste à explorer pour ceux qui ont des pbms.

    Moi ça importait partiellement et ensuite ça tournait sans fin ... le résultat était un import partiel jusqu’au milieu d’une certaine rubrique, donc c’était peut-être un truc dans un article qui coinçait et le fait d’avoir basculé la base hôte en myISAM a corrigé la chose ... ou un pbm d’index ... ?

    Répondre à ce message

  • Hello tous ça pour dire que la partie : Astuce : passer son site de sqlite à mysql est une merveille

    trois sites on subi le transfert seul Hic Le passage de sqlite à mysql a perdu la numérotation existante des articles, si bien que les diaporama de galleria ne fonctionnaient plus, ainsi que GIS.

    alors du coup j’ai bu enfin ma bière ;)

    Répondre à ce message

  • Bonjour,
    J’ai tenté de fusionner 2 sites en SPIP 3.0.17.
    Après le choix du site source, j’ai le message d’erreur suivant :

    Le site hôte et le site source ne sont pas dans la même version de base de données :
    -  hôte est en version 19268
    -  source est en version

    La version de la base de données du site source n’est donc pas détectée.
    Après inspection, la meta version_installee n’est présente ni dans le site source, ni dans le site hôte.
    Bref, en désactivant cette vérification dans le formulaire, j’ai pu forcer la fusion, qui s’est correctement déroulée.

    -  Peut-être faudrait-il se reposer sur une autre méthode pour détecter la version de la bbd de la source ?
    -  En cas de différence de version, il faudrait avoir une option pour ignorer l’erreur, comme c’est suggéré dans la doc.

    Répondre à ce message

  • Petit retour d’expérience (avec SPIP 3.0.17)

    Ce plugin marche au top !!

    Notre principale difficulté a été de le retrouver une fois installé... En effet, il n’apparaissait pas dans le menu « Maintenance » !!
    Pour y accéder, il suffit donc de visiter la page ecrire/ ?exec=fusion_spip

    Et après un clic sur le bouton, plein de warnings php, tous identiques au nom de l’image près, qui nous ont fait craindre que les copies du dossier IMG2 ne se soient pas faites dans IMG !!

    « Warning : copy(../IMG/vignettes/mon_image.jpg) : failed to open stream : No such file or directory in /home/le_site_hote/www/plugins/auto/fusion_spip/v1.0.3/inc/fusion_spip.php on line 490 »

    Mais en fait, tout va bien, tout est bien copié... 600 articles fusionnés en 15 secondes chrono, ça c’est ce que j’appelle de l’efficacité !!

    Répondre à ce message

  • 9
    Thomas

    Bonjour,
    Je suis en train d’effectuer la fusion définitive entre deux bdd, avec IMG, dont j’avais fait un premier essai tout à fait concluant en janvier avec votre aide (cf. [spip3] fusionner 2 bdd sur le rezo).

    Donc j’ai à nouveau mis à niveau une base depuis spip 2.1.23 vers 3.0.13, mis sa sauvegarde (.sqlite) dans le config/bases du site hôte (en 3.0.13), déclaré cette nouvelle base (acceptée avec toutes ses tables). + copié cette fois un dossier IMG (/IMG2)
    Or cette fois, la fusion ne se lance pas, j’ai toujours le message « Cette information est obligatoire » sur le champ du site source de l’interface du plugin, alors que la source est bien renseignée (ma_base.sqlite) et qu’elle est bien reconnue en tant ’Base supplémentaire déjà interrogeable’ par spip....
    Comprend pas...

    Help ?
    Merci
    T

    • Thomas

      Bon et bien après divers essais infructueux, avec une base rendue le plus similaire possible à celle devant l’accueillir (configs de spip, plugins..), le meilleur résultat fut une fusion qui « fonctionna » en ajoutant bien les rubriques mais hélas sans contenus..

      Ensuite :
      -  réinstallation d’un spip 3.0.13 en local en lui attribuant cette fois un nom de base identique à celui de la base devant la recevoir,
      -  nettoyage au maximum de cette base (simplification de l’arborescence, suppression d’articles en attente depuis longtemps etc..),
      -  sauvegarde de la base en lui donnant le nom exacte de la base hôte (base_nom_identique.sqlite)
      -  > import dans le config/bases/ du site distant hôte
      -  > déclaration de la base : ok
      -  > ajout du mysql_query("SET NAMES 'utf8'"); dans le fichier base_nom_identique.php
      -  > renseignement des champs du plugin fusion (base, chemin dossier images, rubrique dans laquelle verser le tout.
      => Fusion ? Ah, cette fois ça marche, il y a toutes les rubriques, ss-rubriques et articles. Sauf que... :
      -  tous les articles précédemment supprimés (« à la poubelle ») lors du ménage en local se retrouvent maintenant parmi les traductions des articles !!!
      En effet sur ce site les articles possèdent une traduction en anglais, donc on a 2 articles (fr + en) mais là, les articles se retrouvent avec d’autres traductions (5, 6, 7...) constituées par des articles précédemment mis à la poubelle...
      -  Les documents (source) n’ont pas été intégrés au IMG (hôte) et donc les liens sont rompus. Bon, ça on peut le faire à la main...

      Je ne crois pas (connais pas) qu’il y ait un moyen de forcer spip à vider sa base des articles mis à la poubelle, avant d’effectuer une sauvegarde (puis une fusion)...
      Quelqu’un aurait-il une piste à ce sujet ? ou pour faire en sorte que la fusion ignore les articles supprimés ?

      Merci
      T

    • Pour le premier problème, le message d’erreur « Cette information est obligatoire » indique qu’aucune base de données source n’a été sélectionnée.
      Le champ select (liste des bases sources) était bien renseigné, avec le nom de la base source dedans ? et elle était bien sélectionnée ?

      Pour le deuxième problème, le plugin Corbeille permet de supprimer définitivement de la base de données les articles (ainsi que forums et autres) à la poubelle.
      Par contre, pourquoi avoir nommé la base source avec le même nom que la base hôte ? ça risque plus de poser des problèmes que d’en résoudre.

      Après ça, s’il y a des erreurs de fusion (articles vides, mélangés ou autres) c’est assez difficile à debugger à distance, dans ce cas je peux faire des tests en local de mon côté mais il me faudrait une copie de chaque base de données (sans les données personnelles, emails et autres).
      Tu peux me contacter en privé par le foormulaire de contact.

      Pour la base source, inutile de la nettoyer (config, plugins, articles anciens etc). S’il y a des plugins différents ça génére un message d’avertissement, mais c’est juste un rappel, ça ne causera aucune erreur.

      Pour l’import des documents (IMG), c’est bien le chemin absolu vers IMG2 qui était indiqué ?
      Chemin absolu = chemin complet sur le disque dur, pas l’adresse web avec http://

      Sous Linux, ça peut ressembler à qqchose comme ça : /home/compte/www/site/IMG par exemple
      Sous OS X : /Users/compte/Sites/site/IMG
      Et sous Windows, j’imagine qqchose comme C :\Program Files\Easy PHP\www\IMG
      (tout ça à adapter très largement)

    • Thomas

      Merci Nicod pour ta réponse.
      -  Alors pour le premier point, oui bien entendu le champ select du plugin était bien renseigné avec les nom de la base à fusionner (sélectionnée). Il m’a mis le message « Cette info est obligatoire » quasiment à toutes mes tentatives, nombreuses, de fusion. (La base avait été déclarée sans problème).

      -  Merci pour le plugin Corbeille, je vais essayer sur ma base à fusionner.

      -  Pour le fait de nommer la base source du même nom de la base hôte, et bien c’est ce que j’ai essayé au bout d’un moment, en désespoir de cause...
      Mes premières tentatives de fusion concernaient une base source nommée différemment que celle de l’hôte (ça devait être d’ailleurs le nom par défaut « spip ») et un fichier nom_du_site.sqlite... mais sans succès. Ensuite j’ai remonté un spip local pour lui donner le même nom de base que celui de la base hôte.. nouvel essai de fusion avec toujours un fichier nom_du_site.sqlite... sans succès. Enfin j’ai essayé en renommant le fichier sqlite du même nom que celui de la base hôte nom_base_hôte.sqlite et là ça a marché. (Je ne me souviens pas d’autres actions avant cette tentative, si ce n’est les choses habituelles : suppression du Nom_de_Base.php + _sqlite3_install.sqlite dans ’bases’, vidage du cache, redéclaration de la base renommée...).
      Donc c’est avec un fichier sqlite du même nom et contenant la base du même nom que la base hôte que ça a marché... (mais en intégrant les articles-poubelle en traductions d’articles).

      -  J’ai nettoyé la base source pour gagner du temps en réfléchissant à ce que je pouvais faire (et éventuellement en attendant une réponse d’ici). De toute façon c’était à faire donc autant le faire avant qu’après la fusion.

      -  Pour le dossier IMG2, dont le nom trahit mon inspiration de l’expérience d’Yves ci-dessous, j’ai mis le même chemin que lui (d’après ce que j’ai compris) certes relatif : ../IMG2 (en fait c’est ../images, nouveau nom donné à l’occasion d’une de mes tentatives). Ce dossier est à la racine du site, avec les autres dossier dont IMG..
      Le site hôte est sur un serveur apache distant dont le chemin est /home/thomas/spip. Donc je vais essayer avec : /home/thomas/spip/images
      D’autre part j’ai tendance à éviter les majuscules dans les noms de fichiers et dossiers et d’ailleurs je crois bien qu’une tentative de fusion à marché après avoir modifié le nom de fichier sqlite : depuis Nom_de_Base.sqlite vers nom_de_base.sqlite (mais cette fusion à générée des rubriques sans contenus : les secteurs de la base source se sont bien mis dans la rubrique hôte sélectionnée mais sans leur contenus).

      Voilà, désolé de raconter un peu ma vie mais je me dis que ces détails peuvent t’être éventuellement utiles même s’il manque le contexte précis.

      Bien, j’essaye avec une nouvelle base source débarrassée des contenus supprimés, un chemin absolu pour le dossier « images » , et on verra.

      Un grand merci, merci pour ta proposition d’aide en privé (ce n’est pas exclu si décidément ça ne veux pas....)
      T

    • Thomas

      Je vais mettre un petit moment avant de refaire une tentative car je me suis aperçu que la plupart des traductions des articles de la base source n’étaient pas basculés en « english » mais restés en « français ».... oh my god... les rédacteurs (et admin) font parfois n’importe quoi... (et s’il n’y avait que ces gestions des trads...).
      Donc je revois toute la base..

    • Pas de problème avec le fait de raconter toute la procédure et les essais, c’est du concret et ça fait un peu de littérature pour ceux qui s’intéressent au plugin :)

      Pour les chemins vers les documents, je confirme, il faut bien indiquer un chemin absolu (/home/thomas/spip/images) et pas relatif (../images).

      C’est un peu contraignant, mais dans ma conception de l’utilisation du plugin, on doit pouvoir fusionner un autre SPIP hébergé sur le même serveur mais à un emplacement différent., pour ne pas avoir à copier des gigas de documents inutilement.
      Et l’utilisation est plutôt pensée pour des utilisateurs avertis, qui à priori doivent connaitre le chemin absolu d’un répertoire sur leur serveur (ou sur leur poste).

    • Je n’avais pas testé le multilinguisme en particulier, mais comme les enregistrements sont copiés ligne à ligne et avec tous leurs champs, je suis confiant : les langues et id_trad suivront lors de l’import des articles sources.
      Par contre, il faudra bien sûr reconfigurer les langues de la même façon sur le site hôte.

    • Thomas

      Je suis aussi confiant, le bordel sur la base source est assez indescriptible donc qu’on obtienne un truc bizarre au final est normal... Cette fois, ça devrait aller mieux.
      Mais c’est long de nettoyer une base (ou les gens mettent des div et ce, pour tout.. de br à la chaîne.. des documents sans passer par spip donc directement dans un sous dossier créé dans IMG et avec des liens <a>....) et aussi donc sans attribuer de langue à leur traductions...
      J’avais déjà nettoyé mais pas dans tous les recoins.
      Presque fini on va voir..

    • Thomas

      Bon alors, je crois que c’est bon maintenant. Mais il m’aura fallu encore 4 tentatives de fusion...

      Au final ça a marché après avoir :
      -  restaurée la base du spip hôte (état avant 1er essai de fusion) + config/nettoyé (cache vidé...)
      -  bien nettoyé les deux bases, source et hôte en m’assurant surtout que sur la base hôte il ne subsiste aucun article commun avec la base source (reste d’une ancienne fusion par exemple... hum..)
      -  emploi du plugin Corbeille pour « vider les corbeilles » des deux spip (puis sauvegardes des bases)
      -  copie du fichier de la base source dans le config/bases. Ce fichier sqlite porte le nom de la bases hôte (tout comme la bdd source. Donc la base et son fichier ont le même nom que la base hôte).
      -  la base est bien déclarée, ok
      -  le fichier de la bdd source est bien renseignée dans le champ ’source’ du plugin, le chemin du dossier images est bien renseignée en /home/thomas/spip/images et la rubrique de destination est renseignée (et vide de contenus)
      => Résultat semble ok. Les articles n’ont plus de traductions fantômes et les documents semblent avoir été intégrés, en tout cas ils apparaissent sur les quelques articles vérifiés.

      Question : le dossier « image » demeure en place avec son contenu. Donc le plugin a copié les docs du dossier images dans le IMG, ce qui signifierait que l’on peut supprimer le dossier images ? (question bête mais à cette heure et avec les neurones qui me reste..).

      A propos des noms de base et de fichier sqlite :
      J’ai encore fait différents essais avant ce dernier, notamment en mettant un fichier de base sqlite dont le nom était « inventé », genre bbd_sitetruc_clean_20140505.sqlite mais j’obtenais le même message « Cette information est obligatoire » pour le champ « source » du plugin. Ce que j’obtenais également avec un nom de bdd différent que celui de la base hôte..
      Bon certes, j’ai fait pas mal de manips et sans tout noter mais j’ai vraiment le sentiment que dans mon cas la fusion fonctionne lorsque la bdd source ainsi que son fichier sqlite portent le même nom que celui de la base hôte...
      Voilà qu’en penses-tu ?
      Ecore merci pour ton aide,
      T

    • Bonjour,
      Simplement, je ne sais pas si j’ai eu de la chance ou ? Mais la seule chose qui a bien fonctionné dans ma deuxième fusion, c’est justement l’import des documents, et j’ai utilisé comme chemin ../IMG2.
      Là j’ai un gros doute... Le serveur que j’utilise aurait-il une configuration atypique ? Quand j’ai testé le plugin, j’avais tenté de donner tous les path possibles... Nada ! Du coup j’avais donné le fameux ../IMG2, là ça avait marché.
      Hier pareil, et aujourd’hui idem les document, c’est la seule chose qui se passe bien.

      Chose que je n’ai pas dite dans mon post précédent, c’est que moi aussi j’ai eu l’erreur « vous devez remplir ce champ » alors que j’avais pourtant déclaré la deuxième base et que... Je voyais le nom ce cette base dans le menu déroulant !
      Bonne journée,
      Yves

    Répondre à ce message

  • Bonjour,
    Malgré l’utilisation de mysql_query(« SET NAMES ’utf8’ ») ,j’ai le même problème que si je ne l’avais pas rajouté...
    J’ai fait trois fois la manip de la fusion, ça ne marche pas.
    (à chaque fois en remettant le base du site hote avec le .sql d’origine)

    Je ne pige vraiment pas d’où ça vient, d’autant plus que j’ai déjà fusionné ces deux sites juste pour tester « Fusion » avant de l’utiliser.

    Bonne journée,
    Y

    Répondre à ce message

  • 1

    Retour d’expérience

    Les deux sites doivent être sous la même version de SPIP, des différences mineures peuvent exister, une fusion entre un site sous 2.x et 3.x est illusoire ; de plus la version “Fusion pour SPIP2” n’est plus maintenue.

    Mode opératoire

    -  On sauvegarde les /IMG et /config des deux sites
    -  On vide le /tmp/cache
    -  On sauvegarde les bases MySQL ou SQLite (dans le cas SQLite, les fichiers sont locaux, dans celui de MySQL, distants)
    -  On installe sur le site hôte (celui qui reçoit les fichiers) le plugin “Fusion” de SPIP (disponible sur http://files.spip.org/Fusion-de-SPIP, “Fusion” dans le menu déroulant “maintenance”)
    -  On y crée une rubrique dont le nom n’existe pas dans le site accueilli, si on ne fait pas cela le résultat sera un mixe des deux sites.
    -  On démarre la fusion…

    Attention : La base du site accueilli doit être déclarée comme « base externe sur le site hôte » après cette déclaration, un fichier nom-de-ma-base.php est créé .

    On édite nom-de-ma-base.php<code> et <code>connect.php et on ajoute :

    mysql_query("SET NAMES 'utf8'");
    après la ligne :
    spip_connect_db('localhost','','basog','ejemrapelplu','basogbis','mysql', 'spip','');

    (bas est le login phpMyadmin pour bosser sur la base, ejmerapelplu le password fourni par les collègues, basbis le nom de la base hôte).

    On renomme en IMG2 le /IMG du site hébergé et on le copie à coté du /IMG du site hôte, a priori, IMG-truc ne fonctionne pas mais IMG2 oui.

    À tester : Ne modifier que non-de-ma-base.php et /IMG-truc sans le -

    On retourne à spip-fusion, la nouvelle base est dispo dans le premier menu déroulant, pour le chemin des documents, le path est ../IMG2.

    Pour “secteur” on donne le nom de la rubrique prévue pour l’accueil.

    Et on lance la fusion…

    • a la place de :
      spip_connect_db(’localhost’,’’,’basog’,’ejemrapelplu’,’basogbis’,’mysql’, ’spip’,’’) ;

      lire :
      spip_connect_db(’localhost’,’’,’bas’,’ejemrapelplu’,’basbis’,’mysql’, ’spip’,’’) ;

      Et le password ne vous est pas fourni par « les collègues » mais par votre hébergeur :-)

      Pardon,
      Y

    Répondre à ce message

  • 3

    Bonjour,
    J’ai modifié le connect.php avec mysql_query(« SET NAMES ’utf8’ ») ; comme dit ci -dessus, malgré cela j’ai les noms de rubrique ainsi que les contenus d’article tronqué à la première lettre accentuée.

    Faut-il aussi modifier le fichier ma-base.php créé lors de la fusion et qui contient les même indications que le connect.php ?

    Merci et bonne journée,
    Y

    • Tout à fait, l’article n’est peut être pas suffisamment explicite mais c’est bien dans le fichier de connexion de la base source (ma-base.php) qu’il faut ajouter cette modif.

    • Je dirais que oui... C’est pas 100% sûr que ça soit ça qui allait pas mais après l’avoir fait ça a marché... C’est curieux.

    • Raah ! !! J’ai compris il faut modifier le ma base.php, pas le connect.php... C’est fou comme je comprend vite ;-)

    Répondre à ce message

  • 1

    Bonjour,
    Au moment ou je veux déclarer la deuxième base (localhost - login - pwd) j’ai simplement « La connexion à la base de données a échoué. » et rien de plus. Je ne vois pas ce que je pourrais donner à la place... Que puis-je faire ?
    Bonne journée,
    Y

    • Oubliez la question ! Le problème était entre la chaise et l’écran !

    Répondre à ce message

  • 1

    J’ai installer Spip en local sur mon serveur XAMPP, sous Linux, et mon mot de passe Spip ne fonctionne plus. Est-ce que Spip le change automatiquement au bout de quelques jours ?

    Y a t-il un moyen de le récupérer ou si je dois réinstaller Spip à chaque fois que ça arrive ?

    • salut,

      a priori non spip ne change pas automatiquement les mots de passe. Quels types de message as-tu ?

      Du reste, je ne vois pas ce que cette question vient faire sous cet article ...

    Répondre à ce message

  • Je note un premier bug à corriger : en cas d’import des documents du IMG source, le script tente de copier dans l’hôte les documents distants, ce qui provoque des erreurs.
    Merci à Jack31 de m’avoir permis de localiser ce bug, promis je m’en occupe dès que possible.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom