Migrando um fórum myBB para Discourse usando Kubuntu em uma VM

Depois de passar muitas horas, pensei que estava perto, mas então…

$ 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?

ainda não deu certo :frowning:

1 curtida

Se entendi bem, o método foi depreciado e depois removido das versões atuais do Ruby:

O script de importação deve ser atualizado para refletir essa mudança.


Talvez tentar substituir exists por exist sem o “s” aqui:

:slight_smile:

Documentação Ruby: https://ruby-doc.org/3.2.2/File.html#method-c-exist-3F

1 curtida

Sim - já estava obsoleto há muito tempo antes disso. Tentarei encontrar as ocorrências relevantes e alterá-las, mas preciso fazer uma pausa neste exercício longo e, até agora, não muito recompensador :wink:

Bem…

$ bundle exec ruby script/import_scripts/mybb.rb
Carregando grupos existentes...
Carregando usuários existentes...
Carregando categorias existentes...
Carregando posts existentes...
Carregando tópicos existentes...
/home/silverdr/sources/discourse/lib/site_setting_extension.rb:444:in `get': Não existe configuração com o nome 'email_domains_blacklist' (Discourse::InvalidParameters)

Você pode encontrar o novo nome nas configurações do site. Acho que é email_domains_blocklist.

Obrigado.

$ grep -R email_domains_blocklist ./\n```
não retorna nada

$ 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```
retorna como acima. Significa que é muito provável que seja blocked_email_domains. Por outro lado, notei que em tentativas anteriores eu substituí o script/import_scripts/base.rb original pelo baseado no gist vinculado acima por @Paul_King:

Restaurei o original de volta e parece que desta vez funcionou. Bom demais para ser verdade. Eu/Ele deve ter perdido alguma coisa :wink: Vou descobrir agora.

2 curtidas

Resumindo a jornada (muito mais longa que este post) :wink: :

NOTA: Usei uma distribuição Kubuntu rodando em máquina virtual para o processo, então, por favor, tenha em mente que pode não ser o mesmo em sistemas operacionais ou até mesmo distribuições diferentes.

0. Instalando o ambiente de desenvolvimento do Discourse

Seguindo este post e executando este script vinculado no post usando

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

conforme descrito lá, mais clonando as fontes

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

1. Preparando o banco de dados MySQL

Obtenha um dump do banco de dados mybb original conforme descrito no topo do thread:

$ mysqldump -u USER_NAME -p DATABASE_NAME > mybb_dump.sql

e copie/mova-o para o ambiente de desenvolvimento recém-configurado.

Instale o servidor MySQL

$ sudo apt-get install mysql-server

A autenticação para o mysql mudou em versões mais recentes. Você tem que ser root no host se quiser ser root no mysql atualmente, então

$ sudo mysql

em vez de

$mysql -u root

Claro, você tem que ser um “sudoer” (administrador) primeiro

$ 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
 
<aqui você recebe um aviso sobre fornecer a senha na linha de comando não ser uma coisa inteligente a fazer>
 
$ sudo mysql
mysql> USE mybb;
mysql> SHOW TABLES;
 
<aqui verifique se todas as tabelas estão presentes - veja o post original>
 
mysql> quit

2. Instalar gems do Ruby

Verificando o Gemfile nas fontes atuais revela que

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

não é realmente necessário. É suficiente definir a variável de ambiente IMPORT como 1.
O que é necessário, no entanto, são os arquivos de desenvolvimento para clientes MySQL, que é o que a primeira linha abaixo trata

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

2. Preparar o Discourse (banco de dados PostgreSQL)

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

3. Executar a importação real

A próxima linha corrige uma chamada de método muito obsoleta e atualmente já removida no script de importação mybb.rb, que ainda está lá no momento da escrita e não mudará nada se isso já foi corrigido

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

Agora verifique se o Redis ainda está em execução. O script de instalação do Rails o inicia, mas não o habilita como um serviço permanente, então ele não sobrevive a reinicializações, falhas, o que for, etc.

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

Se você não vir nada como a linha acima, execute

$ redis-server --daemonize yes

que é exatamente o mesmo comando que o script de instalação do Rails acima usou na primeira vez ao instalar.

Finalmente :pray: e

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

Se neste momento o script não parou com YAE (Yet Another Error - Mais Um Erro), então é hora de abrir aquela garrafa :champagne:

Algumas coisas permanecem

  • OK - então a única parte óbvia que falta são as senhas dos usuários. Aparentemente, mesmo que ambos os aplicativos armazenem hash e salt, a julgar pelo comprimento desses hashes, “mybb” usa um algoritmo de hash mais antigo. Portanto, isso é compreensível e não um impedimento. Todos deveriam ser capazes de redefinir sua senha na primeira vez.
  • Algumas coisas de bbcode não são convertidas. Eu tenho, por exemplo, problemas com blocos de código, que têm algumas tags ao redor deles definindo a fonte monospaced Courier e o que mais. Não tenho mais energia para tentar automatizar mais essa coisa. Se você conseguir fazer algo a respeito, por favor, me/nos informe aqui! :man_bowing:
2 curtidas

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