Ein SMF2-Forum zu Discourse migrieren

Vielleicht solltest du ein Ticket bei Duffield Ocean eröffnen, weil die Zeichen falsch sind?

Du könntest einen SSH-Client wie PuTTY oder die neue Shell verwenden, die meiner Meinung nach Teil des Linux-Subsystem für Windows ist (die letzte Windows-Version, die ich verwendet habe, hatte ein Jahr als Versionsbezeichnung, daher kann ich da nicht weiterhelfen). Wenn du einen Mac benutzt, öffne einfach ein Terminal und verwende ssh.

Wenn deine Datenbank groß ist, wird das Laden der Datenbank eine Weile dauern, und es wird keine Ausgabe erscheinen, außer einer neuen Eingabeaufforderung, wenn es fertig ist. Meine Vermutung ist, dass es ordnungsgemäß funktioniert hat.

2 „Gefällt mir“

Danke @pfaffman. Ich denke, ich werde mich deswegen bei ihnen melden.

Ich kann es mit einem anderen SSH-Client versuchen und schauen, ob das besser funktioniert.

Die Datenbank ist nicht allzu groß. Sie liegt nun seit einer Stunde in der gleichen Position. Ich habe die CPU auf dem Server überprüft, und sie ist im Grunde im Leerlauf.

1 „Gefällt mir“

Ja, das war das Problem! Nochmals vielen Dank @pfaffman. Wir machen wieder Fortschritte…

Eine weitere Lösung besteht darin, den direkten Zugriff auf die Datenbank von der Droplet aus zu ermöglichen, die den Import durchführt, wodurch der Schritt mit einer lokalen Datenbank entfällt.

Wenn eine Stunde vergangen ist, findet der Vorgang wahrscheinlich nicht statt. Sie könnten etwas wie Folgendes versuchen:

 cat database.sql | mysql
1 „Gefällt mir“

Ein Schritt vor, ein Schritt zurück.

Pups::ExecError: if [ -z "$LETSENCRYPT_ACCOUNT_EMAIL" ]; then echo "LETSENCRYPT_ACCOUNT_EMAIL ENV variable is required and has not been set."; exit 1; fi failed with return #<Process::Status: pid 1187 exit 1>

Ich hatte LetsEncrypt nicht installiert, also habe ich es installiert.

In “Vorbereitung des Discourse-Hosts und des Containers für den Import” fehlt der Hinweis, dass Sie die Umgebungsvariable für LETSENCRYPT_ACCOUNT_EMAIL auskommentieren und Ihre E-Mail-Adresse eingeben müssen. Das hat mich über diesen Fehler hinweggebracht.

Im Anschluss daran befinde ich mich nun im letzten Import-Schritt. Ich betrete den Import-Container und führe das Import-Skript aus. Es wird sofort mit folgender Meldung beendet:

Traceback (most recent call last):
        1: from script/import_scripts/smf2.rb:4:in `<main>'
script/import_scripts/smf2.rb:4:in `require': cannot load such file -- mysql2 (LoadError)

Viele Websuchen, bisher aber ohne Erfolg.

EDIT: Ich vermute, dass mysql nicht im Container installiert ist. Ich habe gem install mysql2 versucht, doch das führt zu folgender Meldung:

mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.

EDIT 2:
Ich habe es schließlich geschafft, mysql2 zu installieren. Zuerst musste ich die Entwicklungstools installieren, doch die empfohlene Quelle war nicht verfügbar. Daher habe ich ausgeführt:

sudo apt-get install default-libmysqlclient-dev

Danach konnte ich:

gem install mysql2

Trotzdem trat derselbe Fehler auf. Also habe ich versucht, das require im Skript auszukommentieren, um zu sehen, was passiert. Es trat ein neuer Fehler auf:

Traceback (most recent call last):
        6: from script/import_scripts/smf2.rb:627:in `<main>'
        5: from script/import_scripts/smf2.rb:19:in `run'
        4: from script/import_scripts/smf2.rb:447:in `parse!'
        3: from script/import_scripts/smf2.rb:502:in `parser'
        2: from script/import_scripts/smf2.rb:502:in `new'
        1: from /usr/local/lib/ruby/2.6.0/optparse.rb:1089:in `initialize'
script/import_scripts/smf2.rb:504:in `block in parser': can't modify frozen String (FrozenError)

Die Recherche dazu führt auf einen alten Ruby-Bug, der jedoch vor langer Zeit behoben wurde. Somit bin ich erneut festgefahren.

Gehe zu smf2.rb und ändere den Frozen-String von true auf false oder umgekehrt. Das steht in der ersten oder zweiten Zeile. Danach sollte es funktionieren.

2 „Gefällt mir“

Danke @Paracelsus! Das hat es behoben. Ich habe es von true auf false geändert.

Ein Schritt näher!

EDIT:
Ich hatte einen seltsamen Fehler, der anscheinend auf die falsche IP zeigte. Es lag daran, dass ich das falsche Passwort in der Settings.php hatte. Das ist jetzt behoben.

Jetzt versuche ich herauszufinden:

Traceback (most recent call last):
        7: from script/import_scripts/smf2.rb:627:in `<main>'
        6: from script/import_scripts/smf2.rb:28:in `run'
        5: from script/import_scripts/smf2.rb:28:in `new'
        4: from script/import_scripts/smf2.rb:62:in `initialize'
        3: from script/import_scripts/smf2.rb:274:in `create_db_connection'
        2: from script/import_scripts/smf2.rb:274:in `new'
        1: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `connect': Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory (Mysql2::Error::ConnectionError)

Ich gehe davon aus, dass diese Zeile in der Script-Konfigurationsdatei dazu dient, dieses Problem zu lösen:

ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';

Sollte dies irgendwo im Import-Container hinzugefügt werden?

Alles klar, ich habe das oben genannte Problem gelöst. Dies ist ein Problem mit der neuesten Version von MySQL. Sie unterstützt die älteren nativen Passwörter nicht mehr. Der einfachste Weg, dies zu lösen, ist, diesen Vorgang mit MySQL 5.7 auszuführen. Ändern Sie einfach Schritt 3 von:

docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v ~/smf2:/backup --name=mysql mysql

zu

docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v ~/smf2:/backup --name=mysql mysql:5.7

und alles sollte funktionieren. Mein Import läuft endlich.

2 „Gefällt mir“

Eine neue Frage: Ich kann die Benutzer-Avatare nicht importieren. Sollte es so sein?

Ich habe die Avatare, die neu skaliert werden müssen, in einem benutzerdefinierten Ordner statt im Standardordner von SMF gespeichert. Könnte das der Grund sein?

Ansonsten bisher alles gut. Diese Anleitung ist großartig, und die inkrementellen Datenbankimporte funktionieren ebenfalls hervorragend :+1:.

2 „Gefällt mir“

Unsere sind ohne zusätzliche Schritte übernommen worden. Ich weiß im Moment nicht, wo SMF die Avatare speichert. Hast du deine Anhänge mitübernommen? Ich habe nur unsere SQL-Datenbank und die Anhänge importiert, also vermute ich, dass sie dort enthalten sind.

Ja, sie waren dort, aber ich hatte die Avatare in einen anderen Ordner verschoben und vergessen, sie in den Avatar-Ordner zu kopieren, den der Import zum Abgleich mit dem Benutzer verwendet. Das Problem ist gelöst (auch wenn ich den Import neu erstellen musste).

Ein neues Problem jetzt… verbannte Benutzer erscheinen beim Import nicht als suspendiert, sondern nur als inaktiv. Habt ihr eine Idee, wie man sie stattdessen suspendiert?

1 „Gefällt mir“

Ich verwende die neueste Version v2.50 beta2 von SMF v2.0.17, und es wird eine andere smf2.rb generiert, bedingt durch die aktuelle:

templates/import/mysql-dep.template.yml

Wie in Schritt 4 erklärt, ersetzt “quote =” die aktuelle Iteration:

quote = +“\n[quote="#{params[‘author’]}”

Und weiter gibt es nicht:

Ich habe jedoch den Import durchgeführt, leider bricht er mit “IGNORE_BBCODE meinen Sie IgnoreUser” ab.
Entschuldigung, ich hätte einen Screenshot des Tracebacks machen sollen, habe es aber nicht getan. Jedenfalls ist das meine Erinnerung.
Irgendeine Idee?
Danke.

Ich habe dieses Skript kürzlich aktualisiert. Ich werde mir das ansehen.

1 „Gefällt mir“

Vielen Dank! Eine Frage: Wenn ich von vorne beginne, wird dann das bereits importierte Material überschrieben? Also Benutzer, Kategorien usw.
Viele Grüße!
G.

Im Allgemeinen nein. Die Importskripte sind intelligent genug, um genau dort fortzufahren, wo Sie aufgehört haben!

1 „Gefällt mir“

@tradenet sollte jetzt hier behoben sein:

Entschuldigung dafür!

Sobald alle Prüfungen abgeschlossen sind, wird es in tests-passed verfügbar sein.

3 „Gefällt mir“

Vielen Dank für Ihre Aufmerksamkeit.
G.

2 „Gefällt mir“

Werden alte SMF-URLs nach der Umstellung auf Discourse ungültig?

Nicht wirklich. Der Importer erstellt Permalinks, die den alten URLs entsprechen und diese auf ihre neuen Pfade umleiten.