Comment importer les images et les liens bbPress redirigent 301 vers Discourse ?

Salut,

J’ai réussi à transférer tout le contenu de bbPress vers l’« environnement de développement » de Discourse, en utilisant le script bbpress.rb.

Mais j’ai deux questions pour lesquelles j’aurais besoin d’aide :

1 : Toutes les images apparaissent sur Discourse avec ce chemin « /wp-content/uploads/img_644e48aedc2bf.jpg », c’est le même chemin que l’URL des médias de bbPress. Comment puis-je importer les images également afin qu’elles soient déplacées vers le chemin attendu sur Discourse ?

2 : Les permaliens par défaut de mon bbPress étaient comme ceci « www.demo.com/%postname%/ », bbPress utilise également des permaliens comme
« www.demo.com/?p=123 »
dans sql. Ma question est, comment puis-je modifier le code de bbpress.rb afin de pouvoir importer les anciens liens et les rediriger vers les nouveaux liens Discourse 301 sans aucun problème plus tard ?
Ainsi, lorsque l’utilisateur essaie de visiter l’ancien site
www.demo.com/%postname%/
, le lien est redirigé 301 vers le nouveau
« https://my-discoursexxxx.com/t/1234/%postname% »
Pouvez-vous m’aider avec ces questions ?

Salut,

Pour le point 1, vous devrez modifier le script bbpress pour copier les avatars du dossier et les téléverser sur votre instance Discourse. Vous pouvez consulter le script d’importation vbulletin pour avoir une idée de la façon dont cela pourrait être réalisé, à la ligne 212.

Quant au point 2, ce sera en fait un peu plus compliqué car Discourse ne peut pas accéder aux données de sites web externes (comme http://www.demo.com). La meilleure façon d’y parvenir serait donc de conserver le même domaine et d’apporter quelques légères modifications à la fonction create_permalinks (ligne 379) pour prendre en charge le paramètre postname.

1 « J'aime »

Si vous parlez des publications, alors si vous avez activé le paramètre download remote images to local (télécharger les images distantes en local), Discourse les téléchargera. Il existe des tâches sidekiq qui devraient s’exécuter pour cela.

Vous pouvez consulter d’autres scripts pour « Permalink ».

En bref, les valeurs p=123 devraient être stockées dans TopicCustomFields ou PostCustomFields avec le nom import_id et vous pouvez ensuite exécuter un script pour créer les permaliens.

1 « J'aime »

Il y a quelques minutes, j’ai activé « télécharger les images distantes en local » et téléchargé toutes les images sur le serveur local « bbPress ». Comment puis-je activer les tâches sidekiq pour que Discourse les télécharge lors de l’importation ?

Veuillez excuser le désagrément, comment puis-je rediriger tous les liens de

www.old.com/%postname%/

vers

www.NewDiscourse.com/t/id/%postname%/

Je ne pense pas que %postname%/ soit la même chose.

Vous devez simplement attendre qu’elles se terminent. Si vous préférez modifier le script pour qu’il gère les téléchargements lorsqu’il s’exécute, vous pouvez examiner d’autres scripts qui le font.

Vous pouvez examiner d’autres scripts qui créent des Permalinks. vbulletin.rb contient un exemple de permalinks.

Le bbpress.rb existant gère les pièces jointes qui se trouvent dans la base de données, vous devez donc avoir des utilisateurs qui y ont directement lié, ou quelque chose comme ça ? Vous devrez donc les trouver avec une expression régulière, puis les gérer de la manière dont les autres fonctions de téléchargement le font. Si Discourse les gère, vous préférerez peut-être simplement le laisser faire, car je soupçonne que cela fonctionnera.

1 « J'aime »

Merci @pfaffman @nizar9

J’ai pu enregistrer et transférer toutes les images des anciens articles bbPress vers Discourse en activant la fonctionnalité download remote images dans le panneau de contrôle

Mais :cry: je suis toujours bloqué pour rediriger les anciens liens bbPress en 301 comme ceci

> https://www.demo.com/%postname%

vers le nouveau lien

> www.NewDiscourse.com/t/id/%postname%/

Et je ne peux pas résoudre le problème via une expression régulière htaccess car je ne connais pas le nouvel id pour le même sujet.

Vous ne pouvez pas. Il existe au moins un script d’importation qui exportera les données afin que vous puissiez le faire. Comme je l’ai dit plus tôt, il est possible de créer des redirections Permalink pour résoudre le problème dans Discourse.

Importer des images de bbPress vers Discourse,
voici un exemple de script bbpress.rb.
il copie les images d’avatar du répertoire bbPress et les télécharge sur votre instance Discourse.

# bbpress.rb

# Importer les avatars bbPress et mettre à jour les avatars Discourse
def import_avatars
  users.each do |user|
    bbpress_avatar_path = "/path/to/bbpress/avatars/#{user['avatar_filename']}"
    next unless File.exist?(bbpress_avatar_path)

    avatar_upload = File.open(bbpress_avatar_path)
    DiscourseAvatar.create_for(user['email'], avatar_upload, override_gravatar: true)
  end
end

# Appeler la fonction
import_avatars

Créez maintenant la fonction create_permalinks pour générer les URL appropriées et gérer les redirections 301.

# bbpress.rb

# Créer des permaliens avec le paramètre postname et gérer les redirections
def create_permalinks
  permalinks.each do |permalink|
    topic_id = permalink['topic_id']
    postname = extract_postname_from_permalink(permalink['url']) # Implémentez cette fonction pour extraire le postname

    topic_link = "https://my-discoursexxxx.com/t/#{topic_id}/#{postname}" # Modifiez cette ligne avec la bonne structure d'URL

    create_discourse_permalink(topic_id, permalink['url'], topic_link)
    create_redirect(permalink['url'], topic_link) # Implémentez cette fonction pour créer une redirection 301
  end
end

# Appeler la fonction
create_permalinks

La fonction create_redirect doit ajouter une redirection 301 de l’ancien permalien bbPress vers la nouvelle URL Discourse.
note : Remplacez le chemin selon votre cas.

J’espère que cela fonctionnera.

1 « J'aime »

Cela ne fonctionnera pas pour les téléchargements. Discourse leur donne à tous de nouveaux noms. Je n’avais pas remarqué qu’ils voulaient des redirections d’images. Je n’ai jamais vu personne demander cela.

Cela pourrait fonctionner pour certains sujets où Discourse et bbpress utilisent la même slug par hasard.