Il y a des balises en double dues à une corruption de base de données et je ne peux pas les fusionner

Comme on peut le voir sur l’image, sur nos forums, il existe certains tags qui sont exactement identiques !

Lors de la création d’un sujet, vous verrez un nombre différent de sujets pour ces tags :

Mais si vous en sélectionnez un, les deux sont sélectionnés. Ensuite, lorsque vous cliquez sur les tags, ils redirigent tous les deux vers la même page avec des sujets similaires et des numéros de sujets identiques. Ainsi, les administrateurs ne peuvent ni les fusionner ni en supprimer un.

Ceci est un exemple de sujet sur notre forum comportant deux ensembles de tags en double.

J’ai rencontré un problème similaire causé par un index corrompu.

Je ne sais pas si cela vous aidera : Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes)

@neil des idées ? Est-ce un effet secondaire des synonymes ?

Peu probable, nous avons constaté que de nombreux index corrompus et des plugins tiers défectueux en sont la cause.

Cela ressemble au sujet suivant :

Il existe une index unique sur la colonne tag name, il ne devrait donc pas être possible d’avoir des tags en double. Je parie que si vous exécutez reindex table tags, cela échouera.

La procédure de @pfaffman ici est probablement ce dont vous aurez besoin pour supprimer les tags en double et corriger les index.

Voici la liste des plugins que nous avons ; je suppose qu’aucun d’entre eux n’est lié aux tags :

Je les ai déjà supprimés à la main ! Ou plutôt, j’ai pu supprimer l’un des doublons pour chaque paire ; et ensuite, la page de l’autre tag de la paire est devenue inaccessible (même pour les administrateurs) ! Lorsque nous accédons à la page, nous obtenons le message « cette page n’existe pas ou est privée », bien qu’il y ait plusieurs sujets avec ce tag.

Un exemple serait le tag یادگیری qui devrait contenir 488 sujets, alors que la page du tag n’existe pas (lien vers la page du tag) :

image

P.S. : Désolé, les pages et les tags ne sont pas en anglais. J’espère que cela donnera un indice.

Cela ressemble à une action effectuée depuis l’interface utilisateur, mais ce n’est pas possible de cette manière. Comme Jay l’a fait, vous devez mettre à jour tous les sujets utilisant l’un des tags pour utiliser l’autre, comme dans son exemple :

TopicTag.where(tag_id: 717).update_all(tag_id: 611)

Merci. Existe-t-il une commande pour trouver les balises corrompues (celles que j’ai déjà modifiées via l’interface) ainsi que les balises en double ? Si oui, pouvez-vous m’orienter ?

Je décris comment je l’ai fait (ou quelque chose de similaire) sur Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes) - #14 by pfaffman. Ce n’est pas vraiment un guide pas à pas, mais cela pourrait aider. Vous devrez basculer entre la console Rails et psql, ce qui peut être déroutant ou intimidant si vous n’êtes pas familier avec les deux. Si cela ne fonctionne pas et que vous avez un budget, je l’ai fait récemment. :wink:

Je ne pense pas que la corruption de l’index soit causée par un plugin.
J’ai rencontré ce type de corruption d’index PSQL à cinq reprises au cours des derniers mois, et quatre de ces cas concernaient des paramètres de langue en persan.

Je pense aussi qu’il s’agit d’un bug, et le pire est que cela continue ! Peu importe que j’aie supprimé les doublons précédents, j’en obtiens de nouveaux. Si cela peut aider, je peux supprimer les plugins non officiels et vérifier l’apparition de nouveaux doublons.

Si cela était dû à la langue persane, je suggérerais que cela pourrait être à cause de certains alphabets apparemment similaires mais fondamentalement différents utilisés par différents claviers. Par exemple, certains appareils utilisent l’alphabet arabe et d’autres l’alphabet persan. Dans ces claviers, nous avons ي et ی, qui, lorsqu’ils sont utilisés dans un mot, ne peuvent pas être distingués (mais ils sont différents dans le codage).

Mais le cas de @Pfaffman concernait des index en anglais, pas en persan !

Oui, c’est le seul (et unique) que je connaisse qui ne soit pas en farsi.