Ok, ricapitoliamo velocemente.
Sto facendo volontariato per la migrazione di un forum che attualmente è su vbulletin3.
Su un ambiente di staging, partendo da un dump del database (20GB, avete letto bene).
Eseguo l’aggiornamento a vBulletin 5. Ci sono volute 5-6 ore ma è andato a buon fine. La versione è vBulletin 5.4.
Ho fatto un po’ di pulizia dei nomi utente per farli accettare da discourse.
Ora, ho installato discourse su docker e ho seguito in modo approssimativo questa guida per la preparazione. Approssimativamente significa che la maggior parte era ridondante o obsoleta, ma ha aiutato a farsi un’idea di cosa fare.
Sono arrivato al punto in cui sto letteralmente diventando cieco perché ho quasi zero esperienza di programmazione Ruby.
Quindi, le parti rilevanti, dopo aver terminato l’installazione sono entrato nel container con ./launcher enter app quindi:
- Aggiunto
freetds-develibmariadb-dev - Modificato il Gemfile per aggiungere la gem
php_serialize. - Dalla shell, eseguito
export IMPORT=1per impostare l’ambiente per l’importazione. - Come utente
discourseeseguitobundle install --no-deployment --without test --without development --path vendor/bundle
Ho ottenuto l’errore:
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.
If this is a development machine, remove the /var/www/discourse/Gemfile freeze
by running `bundle config unset deployment`.
The list of sources changed
The dependencies in your gemfile changed
You have added to the Gemfile:
* mysql2
* redcarpet
* php_serialize
* sqlite3 (~> 1.3, >= 1.3.13)
* ruby-bbcode-to-md
* reverse_markdown
* tiny_tds
* csv
* parallel
Quindi, ho continuato con:
bundle config unset deploymente rieseguito il comando precedente.- Verificato che sia
mysql2chephp_serializefossero presenti (lo erano). - Aggiunto gli avatar del vecchio forum (nessun allegato da importare) e assegnato la proprietà delle directory all’utente
discoursenella sua home/home/discourse. - Modificato
script/import_scripts/vbulletin5.rbper cambiare il riferimento per la connessione al db. - Come utente
discourseeseguitobundle exec ruby script/import_scripts/vbulletin5.rb
Questo mi ha restituito un errore relativo a tzinfo Integer values not supported che ho trovato menzionato qui su questo discourse.
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
importing groups...
41 / 41 (100.0%) [2294 items/min]
importing users
Traceback (most recent call last):
15: from script/import_scripts/vbulletin5.rb:726:in `<main>'
14: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
13: from script/import_scripts/vbulletin5.rb:46:in `execute'
12: from script/import_scripts/vbulletin5.rb:79:in `import_users'
11: from /var/www/discourse/script/import_scripts/base.rb:916:in `batches'
10: from /var/www/discourse/script/import_scripts/base.rb:916:in `loop'
9: from /var/www/discourse/script/import_scripts/base.rb:917:in `block in batches'
8: from script/import_scripts/vbulletin5.rb:98:in `block in import_users'
7: from /var/www/discourse/script/import_scripts/base.rb:264:in `create_users'
6: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
5: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
4: from /var/www/discourse/script/import_scripts/base.rb:265:in `block in create_users'
3: from script/import_scripts/vbulletin5.rb:110:in `block (2 levels) in import_users'
2: from script/import_scripts/vbulletin5.rb:718:in `parse_timestamp'
1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/tzinfo-2.0.5/lib/tzinfo/timezone.rb:575:in `utc_to_local'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/tzinfo-2.0.5/lib/tzinfo/timestamp.rb:138:in `for': Integer values are not supported (ArgumentError)
Il suggerimento di @Haddoq è stato di cambiare una riga da Time.zone.at(@tz.utc_to_local(timestamp)) in Time.zone.at(timestamp).
Ha anche suggerito di aggiungere lastvisit nella query dell’utente perché altrimenti causerà un altro errore, quindi l’ho fatto anche quello.
Tuttavia, ora quando avvio la migrazione con bundle exec ruby script/import_scripts/vbulletin5.rb ottengo questo:
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
importing groups...
41 / 41 (100.0%) [120217 items/min]
importing users
Traceback (most recent call last):
13: from script/import_scripts/vbulletin5.rb:727:in `<main>'
12: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
11: from script/import_scripts/vbulletin5.rb:46:in `execute'
10: from script/import_scripts/vbulletin5.rb:79:in `import_users'
9: from /var/www/discourse/script/import_scripts/base.rb:916:in `batches'
8: from /var/www/discourse/script/import_scripts/base.rb:916:in `loop'
7: from /var/www/discourse/script/import_scripts/base.rb:917:in `block in batches'
6: from script/import_scripts/vbulletin5.rb:80:in `block in import_users'
5: from script/import_scripts/vbulletin5.rb:723:in `mysql_query'
4: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:22:in `query'
3: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/client.rb:147:in `query'
2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/client.rb:147:in `handle_interrupt'
1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/client.rb:148:in `block in query'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/client.rb:148:in `_query': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CASE WHEN u.scheme='blowfish:10' THEN token (Mysql2::Error)
WHEN u.scheme='lega' at line 2
A questo punto sono un po’ perso. Qualcuno può aiutarmi?

