Migration eines myBB-Forums nach Discourse unter Verwendung von Kubuntu in einer VM

Nachdem ich viel zu viele Stunden damit verbracht hatte, dachte ich, ich wäre nah dran, aber dann…

$ bundle exec ruby script/import_scripts/mybb.rb 
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...

creating users
script/import_scripts/mybb.rb:96:in `block (3 levels) in import_users': undefined method `exists?' for File:Class (NoMethodError)

                  @uploader.create_avatar(newuser, filename) if File.exists?(filename)
                                                                    ^^^^^^^
Did you mean?  exist?

immer noch kein Erfolg :frowning:

1 „Gefällt mir“

Wenn ich das richtig verstehe, wurde die Methode in aktuellen Ruby-Versionen als veraltet markiert und dann entfernt:

Das Import-Skript sollte aktualisiert werden, um diese Änderung widerzuspiegeln.


Vielleicht versuchen Sie, exists durch exist ohne “s” zu ersetzen:

:slight_smile:

Ruby-Doku: https://ruby-doc.org/3.2.2/File.html#method-c-exist-3F

1 „Gefällt mir“

Ja – es wurde schon lange vorher als veraltet eingestuft. Ich werde versuchen, relevante Vorkommen herauszufiltern und sie zu ändern, aber ich muss eine Pause von dieser langwierigen und bisher nicht sehr lohnenden Übung einlegen :wink:

Nun…

$ bundle exec ruby script/import_scripts/mybb.rb
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
/home/silverdr/sources/discourse/lib/site_setting_extension.rb:444:in `get': No setting named 'email_domains_blacklist' exists (Discourse::InvalidParameters)

Sie finden den neuen Namen in den Website-Einstellungen. Ich glaube, es ist email_domains_blocklist

Danke.

$ grep -R email_domains_blocklist ./\n```
gibt nichts zurück

$ grep -R email_domains_blacklist ./\n./script/import_scripts/base.rb: email_domains_blacklist: ‘’,\n./app/models/site_setting.rb: email_domains_blacklist: "blocked_email_domains",\n```
gibt wie oben zurück. Das bedeutet, es ist höchstwahrscheinlich blocked_email_domains. Andererseits habe ich bemerkt, dass ich in früheren Versuchen das ursprüngliche script/import_scripts/base.rb durch das von @Paul_King verlinkte Gist-basierte ersetzt habe:

Ich habe das Original wiederhergestellt und es scheint diesmal durchgelaufen zu sein. Zu gut, um wahr zu sein. Ich/Es muss etwas übersehen haben :wink: Werde es jetzt herausfinden

2 „Gefällt mir“

Zusammenfassung der (viel längeren als dieser Beitrag :wink: Reise:

HINWEIS: Ich habe für den Prozess eine Kubuntu-Distribution in einer virtuellen Maschine verwendet. Bitte beachten Sie, dass dies auf anderen Betriebssystemen oder sogar Distributionen möglicherweise nicht dasselbe ist.

0. Discourse-Entwicklungsumgebung installieren

Folgen Sie diesem Beitrag und führen Sie dieses Skript aus, das in dem Beitrag verlinkt ist, mit

`bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/master/linux)`

wie dort beschrieben, plus das Klonen der Quellen

git clone https://github.com/discourse/discourse.git ~/discourse

1. MySQL-Datenbank vorbereiten

Holen Sie sich einen Dump der ursprünglichen mybb-Datenbank, wie oben im Thread beschrieben:

$ mysqldump -u BENUTZERNAME -p DATENBANKNAME > mybb_dump.sql

und kopieren/verschieben Sie ihn in die neu eingerichtete Entwicklungsumgebung.

MySQL-Server installieren

$ sudo apt-get install mysql-server

Die Authentifizierung für MySQL hat sich in neueren Versionen geändert. Sie müssen Root auf dem Host sein, wenn Sie heutzutage Root in MySQL sein wollen, also

$ sudo mysql

anstelle von

$mysql -u root

Natürlich müssen Sie zuerst ein „sudoer“ (Administrator) sein.

$ sudo mysql
mysql> CREATE DATABASE mybb;
mysql> SHOW DATABASES;
mysql> CREATE USER 'nonrootuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON mybb.* TO 'nonrootuser'@'localhost';
mysql> quit
$ mysql -unonrootuser -ppassword mybb < mybb_dump.sql

<hier erhalten Sie eine Warnung, dass die Angabe des Passworts in der Befehlszeile keine gute Idee ist>

$ sudo mysql
mysql> USE mybb;
mysql> SHOW TABLES;

<hier überprüfen Sie, ob alle Tabellen vorhanden sind - siehe Originalbeitrag>

mysql> quit

2. Ruby-Gems installieren

Wenn Sie die Gemfile in den aktuellen Quellen überprüfen, stellen Sie fest, dass

$ echo "gem 'mysql2', require: false" >> Gemfile

nicht wirklich benötigt wird. Es reicht aus, die Umgebungsvariable IMPORT auf 1 zu setzen.
Was jedoch benötigt wird, sind die Entwicklungsdateien für MySQL-Clients, worum es bei der ersten Zeile unten geht.

$ sudo apt-get install libmysqlclient-dev
$ cd ~/discourse
$ IMPORT=1 bundle install

2. Discourse (PostgreSQL-Datenbank) vorbereiten

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ export DB_PW="password"
$ export DB_USER="nonrootuser"

3. Den eigentlichen Import ausführen

Die nächste Zeile behebt einen lange veralteten und derzeit bereits entfernten Methodenaufruf im mybb.rb-Importskript, der zum Zeitpunkt des Schreibens noch vorhanden ist und nichts ändert, wenn er bereits behoben wurde.

$ sed -i.original 's/File.exists?/File.exist?/' script/import_scripts/mybb.rb

Überprüfen Sie nun, ob Redis noch läuft. Das Rails-Installationsskript startet es, aktiviert es aber nicht als permanenten Dienst, sodass es Neustarts, Abstürze usw. nicht überlebt.

$ ps -aux |grep redis
silverdr    2808  0.3  0.3  89972 14512 ?        Ssl  05:25   2:04 redis-server *:6379
[….]

Wenn Sie nichts Ähnliches wie die obige Zeile sehen, führen Sie aus

$ redis-server --daemonize yes

was genau der Befehl ist, den das obige Rails-Installationsskript bei der ersten Installation verwendet hat.

Endlich :pray: und

$ IMPORT=1 bundle exec ruby script/import_scripts/mybb.rb

Wenn das Skript zu diesem Zeitpunkt nicht mit YAE (Yet Another Error) stoppt, ist es Zeit, die Flasche zu öffnen :champagne:

Ein paar Dinge bleiben

  • OK - das einzig offensichtliche fehlende Teil sind die Passwörter der Benutzer. Anscheinend, obwohl beide Anwendungen Hashes und Salts speichern, verwendet “mybb” aufgrund der Länge dieser Hashes einen älteren Hashing-Algorithmus. Daher ist dies verständlich und kein Showstopper. Jeder sollte sein Passwort beim ersten Mal zurücksetzen können.
  • Einige bbcode-Sachen werden nicht konvertiert. Ich habe zum Beispiel Probleme mit Codeblöcken, die einige Tags um sich herum haben, die die monospaced Courier-Schriftart und dergleichen einstellen. Ich habe keine Ausdauer mehr, um diese Sache weiter zu automatisieren. Wenn es Ihnen gelingt, etwas dagegen zu tun, lassen Sie es mich/uns hier wissen! :man_bowing:
2 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.