Importieren von Skripten vbulletin5.rb

Ich verwende das offizielle Import-Skript für vBulletin v5 und bin auf ein Problem gestoßen.

Meine vBulletin-Forum-Struktur sieht so aus:

/forum/
/forum/sub-category1/
/forum/sub-category1/thread1/
/forum/sub-category1/thread2/
/forum/sub-category2/
/forum/sub-category2/thread1/
/forum/sub-category2/thread2/

Beim Ausführen des Import-Skripts entstehen in Discourse zwei Kategorien ohne Threads:

/c/sub-category1
/c/sub-category2

Ich habe mir ein anderes vBulletin-Forum angesehen und festgestellt, dass dort die URLs nicht verschachtelt sind. Ich gehe nun davon aus, dass dies die Änderung ist, die ich an meinem Forum vornehmen muss, bevor ich das Skript verwenden kann:

/forum/
/forum/sub-category1/
/forum/sub-category2/
/forum/thread1a/
/forum/thread2a/
/forum/thread1b/
/forum/thread2b/

Anschließend müsste ich manuell jedem Thread wieder eine Kategorie zuweisen.

Hat jemand Erfahrung mit der Nutzung dieses Skripts?

Fällt Ihnen im Skript vielleicht etwas auf, das geändert werden kann, damit es eine stärker verschachtelte Struktur verarbeiten kann? Ich befinde mich möglicherweise auf einem völlig falschen Weg.

Meinst du mit ‘Thread’ ein Diskussions-Thema? Werden die Themen erstellt, aber nicht in den richtigen Kategorien?

Hey Jay,

danke für deine Antwort.

Ah ja – ich meine Discourse-Themen. Dort sind außer den leeren Kategorien nichts vorhanden. Und alle Benutzer wurden erfolgreich importiert.

Mike

Etwas verhindert, dass Themen und Beiträge importiert werden. Ich würde erwarten, dass Sie Fehlermeldungen sehen, wenn der Importvorgang läuft. Themen und Beiträge werden nach den Benutzern erstellt. Ich gehe davon aus, dass Themen und Beiträge in separaten Funktionen verarbeitet werden. Der Importeur sollte Ihnen den Fortschritt dabei anzeigen, genau wie er es für die Benutzer getan hat.

Während des Imports treten keine Fehlermeldungen auf – nur einige Warnungen zu ungültigen Benutzer-E-Mail-Adressen, wenn die Funktion create_users ausgeführt wird. Der Benutzerimport ist jedoch am Ende erfolgreich. Hier ist das Protokoll (ich habe die Warnungen entfernt, da sie Kunden-E-Mail-Adressen enthielten):

importing posts...
5 / 5 (100.0%)  [290527 items/min]                                                            
importing attachments...   
20182 / 5 (403640.0%)

Hier scheint es, als würden nur meine fünf Kategorien als Beiträge erkannt und importiert. Und es wird nicht gewusst, was mit allen Anhängen der eigentlichen Themen gemacht werden soll, die nicht importiert wurden?

Haftungsausschluss:

Anfangs schlug der Import fehl, weil die mir übergebene vBulletin-Datenbank keine Tabelle customprofilepic enthielt – ich habe hier eine leere Tabelle hinzugefügt.

Es gab auch keine benutzerdefinierten Avatare – daher ist das im Import-Skript referenzierte AVATAR_DIR nur ein leerer Ordner, den ich erstellt habe. Ich habe die folgenden Zeilen im Import-Skript, die auf diese Assets verweisen, auskommentiert:

create_users(users, total: user_count, offset: offset) do |user|
        username = @htmlentities.decode(user["username"]).strip
        {
          id: user["userid"],
          name: username,
          username: username,
          email: user["email"].presence || fake_email,
          admin: user['admin'] == 1,
          password: user["password"],
          website: user["homepage"].strip,
          title: @htmlentities.decode(user["usertitle"]).strip,
          primary_group_id: group_id_from_imported_group_id(user["usergroupid"]),
          created_at: parse_timestamp(user["joindate"])
          # post_create_action: proc do |u|
          #   @old_username_to_new_usernames[user["username"]] = u.username
          #   import_profile_picture(user, u)
          #   import_profile_background(user, u)
          # end
        }
      end

Aber meines Wissens nach betreffen diese Änderungen nur die Erstellung der Benutzer. Und die Benutzer werden erfolgreich erstellt.

Dies ist das vollständige Import-Skript, das ich verwende:

Das Skript sammelt alle Themen aus der node-Tabelle in der vBulletin-Datenbank, die vorhanden ist und etwa 34.000 Beiträge enthält. Die Spaltennamen stimmen mit den vom Skript referenzierten Namen überein:

Es sieht so aus, als ob es einfach funktionieren sollte :roll_eyes:

Das Import-Skript sucht nach contenttypeid=23 und contenttypeid=22, um Beiträge zu erstellen.

Beim Durchsuchen der node-Tabelle kann ich sagen, dass 23 für einen Beitrag mit Anhang steht und 22 den Anhang selbst darstellen sollte.

Die meisten Beiträge haben contenttypeid=21 – Beiträge ohne Anhänge. Einen Import dafür sehe ich nicht. Oder ist das durch Folgendes abgedeckt:

post_count = mysql_query("SELECT COUNT(nodeid) cnt FROM #{DBPREFIX}node WHERE parentid NOT IN (
SELECT nodeid FROM #{DBPREFIX}node WHERE contenttypeid=23 ) AND contenttypeid=22;").first["cnt"]

Dies durchläuft alles, was nach dem Import von 23/22 übrig bleibt. Es gibt jedoch weitere Content-Type-IDs neben 23/22/21 – somit würden auch diese erfasst.


Kategorien werden relativ zu einem ROOT_NODE importiert, der standardmäßig auf 2 gesetzt ist. Vielleicht muss ich ihn auf 3 setzen, um meine “3-stufig verschachtelten” URLs zu unterstützen?

UPDATE: Ich habe den Import gerade mit ROOT_NODE=3 erneut ausgeführt, aber es hat sich nichts geändert.

Es scheint, als wäre dein vBulletin anders als das, was das Skript erwartet. Bevor du die Beiträge importieren kannst, musst du herausfinden, warum keine der Themen erstellt wurden.

Ok. Es ist die contenttypeid, die das Problem verursacht:

def import_categories
    puts "", "Importiere Top-Level-Kategorien..."

    categories = mysql_query("SELECT nodeid AS forumid, title, description, displayorder, parentid
	      FROM #{DBPREFIX}node
          WHERE parentid=#{ROOT_NODE}
        UNION
          SELECT nodeid, title, description, displayorder, parentid
          FROM #{DBPREFIX}node
          WHERE contenttypeid = 20
            AND parentid IN (SELECT nodeid FROM #{DBPREFIX}node WHERE parentid=#{ROOT_NODE})").to_a

Beispielsweise verwendet die Funktion import_categories contenttypeid = 23, was dieselbe ID ist, die das Skript für Beiträge verwendet. Die ID für Kategorien ist 20. Durch das Ändern dieser Einstellung im Skript kann ich endlich meine Unterkategorien/Themen sehen :raised_hands:

Nun fehlen nur noch die Threads/Beiträge.

Ich habe einen Pull Request mit einigen Aktualisierungen für den VBulletin5-Importer eingereicht. Eine der wichtigsten Änderungen ist, dass die hart kodierten IDs entfernt wurden.

Außerdem gibt es eine bessere Unterstützung für Uploads, und der Importeur importiert nun Tags und erstellt Permalinks für Themen sowie (Unter-)Kategorien.