Ok, um rápido resumo.
Estou a fazer voluntariado na migração de um fórum que está atualmente no vbulletin3.
Num ambiente de staging, a partir de um dump da base de dados (20GB, leu bem).
Executei o upgrade para vBulletin 5. Levou 5-6 horas, mas correu bem. A versão é vBulletin 5.4.
Fiz alguma limpeza nos nomes de utilizador para serem aceites pelo discourse.
Agora, instalei o docker discourse e segui vagamente este guia para a preparação. Vagamente, significando que a maior parte era redundante ou desatualizada, mas ajudou a ter uma ideia do que fazer.
Estou na fase em que estou literalmente a ficar cego, pois tenho quase zero experiência em programação Ruby.
Portanto, as partes relevantes, após terminar a instalação, entrei no container com ./launcher enter app e depois:
- Adicionei
freetds-develibmariadb-dev - Editei o Gemfile para adicionar a gem
php_serialize. - A partir da shell, executei
export IMPORT=1para definir o ambiente de importação. - Como utilizador
discourse, executeibundle install --no-deployment --without test --without development --path vendor/bundle
Recebi o erro:
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
Portanto, continuei com:
bundle config unset deploymente executei novamente o comando anterior.- Verifiquei que tanto
mysql2comophp_serializeestavam lá (estavam). - Adicionei os avatares antigos do fórum (sem anexos para importar) e atribuí a propriedade dos diretórios ao utilizador
discourseno seu próprio/home/discourse. - Editei
script/import_scripts/vbulletin5.rbpara alterar a referência para a ligação à base de dados. - Como utilizador
discourse, executeibundle exec ruby script/import_scripts/vbulletin5.rb.
Isto retornou-me um erro sobre tzinfo Integer values not supported que encontrei mencionado aqui neste 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)
A sugestão do @Haddoq foi mudar uma linha de Time.zone.at(@tz.utc_to_local(timestamp)) para Time.zone.at(timestamp).
Também sugere adicionar lastvisit na query do utilizador, pois caso contrário causará outro erro, o que também fiz.
No entanto, agora, quando executo a migração com bundle exec ruby script/import_scripts/vbulletin5.rb, isto é o que recebo:
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
Neste ponto, estou um pouco perdido. Alguém pode ajudar?

