Import von bbPress-Bildern und Links mit 301-Weiterleitung nach Discourse?

Hallo,

Ich habe es geschafft, alle Inhalte von bbPress in die „Entwicklungsumgebung“ von Discourse zu übertragen, indem ich das bbpress.rb-Skript verwendet habe.

Ich habe jedoch zwei Fragen, bei denen ich Hilfe gebrauchen könnte:

1: Alle Bilder erscheinen in Discourse unter diesem Pfad „/wp-content/uploads/img_644e48aedc2bf.jpg“, was dem gleichen bbPress-Medien-URL-Pfad entspricht. Wie kann ich die Bilder ebenfalls importieren, damit sie auf den erwarteten Pfad in Discourse verschoben werden?

2: Mein Standard-Permalink für bbPress war wie folgt: „www.demo.com/%postname%/“, bbPress verwendet auch Permalinks
„www.demo.com/?p=123“
in SQL. Meine Frage ist, wie kann ich den bbpress.rb-Code bearbeiten, damit alte Links importiert und später problemlos auf neue Discourse-Links mit 301-Weiterleitung umgeleitet werden?
Wenn der Benutzer versucht, die alte Website zu besuchen
www.demo.com/%postname%/
wird der Link mit 301 auf die neue umgeleitet
„https://my-discoursexxxx.com/t/1234/%postname%“
Können Sie mir bei diesen Fragen helfen?

Hallo,

Für 1 müssen Sie das bbpress-Skript ändern, um die Avatare aus dem Ordner zu kopieren und sie in Ihre Discourse-Instanz hochzuladen. Sie können das vbulletin-Importskript als Anhaltspunkt dafür, wie dies erreicht werden könnte, in Zeile 212 überprüfen.

Was 2 betrifft, so wird dies tatsächlich etwas komplizierter sein, da Discourse nicht auf die Daten externer Websites (wie http://www.demo.com) zugreifen kann. Der beste Weg, dies zu erreichen, wäre daher, dieselbe Domain beizubehalten und einige geringfügige Änderungen an der Funktion create_permalinks (Zeile 379) vorzunehmen, um den Parameter postname zu unterstützen.

1 „Gefällt mir“

Wenn Sie Beiträge meinen, dann lädt Discourse sie herunter, wenn Sie „Remote-Bilder lokal herunterladen“ aktiviert haben. Dafür sollten Sidekiq-Jobs ausgeführt werden.

Sie können sich andere Skripte für „Permalink“ ansehen.

Kurz gesagt, die p=123-Werte sollten in TopicCustomFields oder PostCustomFields mit dem Namen import_id gespeichert werden, und Sie können dann ein Skript ausführen, um die Permalinks zu erstellen.

1 „Gefällt mir“

Vor ein paar Minuten habe ich „Remote-Bilder lokal herunterladen“ aktiviert und alle Bilder auf den lokalen Server „bbPress“ heruntergeladen. Wie kann ich die Sidekiq-Jobs aktivieren, damit Discourse sie während des Imports herunterlädt?

Entschuldigen Sie die Unannehmlichkeiten, wie leite ich alle Links von

www.old.com/%postname%/

zu

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

um? Ich glaube nicht, dass %postname%/ dasselbe ist.

Sie müssen nur warten, bis sie fertig sind. Wenn Sie das Skript lieber so ändern möchten, dass es die Uploads verarbeitet, wenn es ausgeführt wird, können Sie sich andere Skripte ansehen, die das tun.

Sie können sich andere Skripte ansehen, die Permalinks erstellen. vbulletin.rb enthält ein Beispiel für Permalinks.

Das vorhandene bbpress.rb verarbeitet Anhänge, die in der Datenbank vorhanden sind. Sie müssen also Benutzer haben, die direkt darauf verlinkt haben, oder so etwas? Sie müssten sie also mit einem Regex finden und sie dann so behandeln, wie es die anderen Upload-Funktionen tun. Wenn Discourse sie verarbeitet, dann lassen Sie es lieber, da ich vermute, dass das funktionieren wird.

1 „Gefällt mir“

Vielen Dank @pfaffman @nizar9

Ich konnte alle Bilder aus den alten bbPress-Artikeln nach Discourse speichern und übertragen, indem ich die Funktion download remote images im Control Panel aktiviert habe.

Aber :cry: ich hänge immer noch daran, alte bbPress-Links wie diesen per 301-Weiterleitung umzuleiten:

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

zum neuen Link:

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

Und ich kann das Problem nicht mit htaccess-Regulären Ausdrücken lösen, weil ich nicht weiß, was die neue ID für dasselbe Thema ist.

Das können Sie nicht. Es gibt mindestens ein Import-Skript, das Daten ausgibt, damit Sie dies tun können. Wie ich bereits sagte, ist es möglich, Permalink-Umleitungen zu erstellen, um das Problem in Discourse zu lösen.

Bilder von bbPress nach Discourse importieren,
hier ist ein Beispielskript für bbpress.rb.
Es kopiert die Avatar-Bilder aus dem bbPress-Verzeichnis und lädt sie in Ihre Discourse-Instanz hoch.

# bbpress.rb

# bbPress-Avatare importieren und Discourse-Avatare aktualisieren
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

# Funktion aufrufen
import_avatars

Erstellen Sie nun die Funktion create_permalinks, um die entsprechenden URLs zu generieren und 301-Weiterleitungen zu verarbeiten.

# bbpress.rb

# Permalinks mit dem Parameter "postname" erstellen und Weiterleitungen verarbeiten
def create_permalinks
  permalinks.each do |permalink|
    topic_id = permalink['topic_id']
    postname = extract_postname_from_permalink(permalink['url']) # Implementieren Sie diese Funktion, um den Postnamen zu extrahieren

    topic_link = "https://my-discoursexxxx.com/t/#{topic_id}/#{postname}" # Ändern Sie diese Zeile mit der richtigen URL-Struktur

    create_discourse_permalink(topic_id, permalink['url'], topic_link)
    create_redirect(permalink['url'], topic_link) # Implementieren Sie diese Funktion, um eine 301-Weiterleitung zu erstellen
  end
end

# Funktion aufrufen
create_permalinks

Die Funktion create_redirect sollte eine 301-Weiterleitung von der alten bbPress-Permalink zur neuen Discourse-URL hinzufügen.
Hinweis: Ersetzen Sie den Pfad entsprechend.

Ich hoffe, es funktioniert.

1 „Gefällt mir“

Das wird bei den Uploads nicht funktionieren. Discourse gibt ihnen allen neue Namen. Mir war nicht aufgefallen, dass sie Bild-Redirects wollten. Ich habe noch nie jemanden gesehen, der danach gefragt hat.

Es könnte für einige Themen funktionieren, bei denen Discourse und bbpress zufällig denselben Slug verwenden.