Migrar um fórum vBulletin 4 para Discourse

Sem orçamento para isso. Mas. Talvez.

2 curtidas

Alguém já viu esse problema ao executar o script de importação?

Processando postagens…
37785 / 48843 (77,4%) Encerrado*

O processo foi encerrado antes de concluir. Quando carrego os Fóruns, as mensagens importadas parecem estar lá, mas estou preocupado de que não tenha concluído corretamente e que isso possa causar problemas.

Alguma recomendação? Talvez um erro de memória insuficiente? Posso simplesmente executar o script novamente para retomar de onde parou, ou ele tentará reimportar dados duplicados? Obrigado.

Execute o script novamente. Ele não duplicará os dados.

3 curtidas

Obrigado, @pfaffman! Isso funcionou muito bem.

4 curtidas

Olá,

Primeiramente, obrigado por este guia fantástico. Agradeço o trabalho que foi dedicado a ele.

Sobre o meu problema:
Estou com dificuldades para conectar ao banco de dados ao executar o script de importação, embora esteja usando o MariaDB para armazenar o dump do vBulletin em vez do MySQL. Verifiquei que o MariaDB está em execução, consegui importar meu dump do vBulletin nele e conferi quatro vezes o nome de usuário, o host e a senha no script, mas ainda assim não obtive sucesso.

Sinto que estou deixando passar algo simples; se alguém puder me indicar o caminho certo, seria muito útil.

Estou usando as seguintes versões:

mysql2 0.5.2
mariadb-server-10.3
discourse master git commit cb8fa46

Descrição completa abaixo:

Quando tento executar:

apt-get update && apt-get install libmysqlclient-dev mysql-server-5.7

recebo um erro:

E: O pacote 'libmysqlclient-dev' não possui candidato para instalação
E: O pacote 'mysql-server-5.7' não possui candidato para instalação

O que faz sentido; talvez esses pacotes tenham sido removidos do repositório desde então.

Então, em vez disso, executo:

apt-get update && apt-get install mariadb-server-10.3 libmariadbd-dev

O MariaDB funciona como um substituto direto, o que é ótimo, pois todos os passos funcionam até o momento em que tento executar o script de migração, momento em que recebo o erro:

root@discourse:/src# su discourse -c 'bundle exec ruby script/import_scripts/vbulletin.rb'
root:@localhost wants vb4
Carregando grupos existentes...
Carregando usuários existentes...
Carregando categorias existentes...
Carregando posts existentes...
Carregando tópicos existentes...
==================================================
Acesso negado para o usuário 'root'@'localhost'
Não foi possível conectar ao banco de dados.

Host: localhost
Usuário: root
Senha: 
Banco de dados: vb4

Edite o script ou defina as seguintes variáveis de ambiente:

export DB_HOST="localhost"
export DB_NAME="vbulletin"
export DB_PW=""
export DB_USER="root"
export TABLE_PREFIX="vb_"
export ATTACHMENT_DIR '/path/to/your/attachment/folder'

Saindo.

Sobre as permissões:

root@discourse:/src# mysql
Bem-vindo ao monitor MariaDB. Os comandos terminam com ; ou \g.
Seu ID de conexão MariaDB é 59
Versão do servidor: 10.3.17-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab e outros.

Digite 'help;' ou '\h' para obter ajuda. Digite '\c' para limpar a instrução de entrada atual.

MariaDB [(none)]> show grants;
+------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                      |
+------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                  |
+------------------------------------------------------------------------------------------------+
2 linhas no conjunto (0.000 seg)

Verifiquei várias vezes o nome de usuário e a senha, e até mesmo os defini manualmente.

2 curtidas

Fiz uma pequena investigação e descobri que a mudança da imagem base de Ubuntu 16.04 para Debian é certamente a culpada pela indisponibilidade do MySQL, mas ainda estou confuso sobre como fazer o mysql2 se conectar ao MariaDB.

Enviei um PR há algum tempo que faz com que o mysql-dep.template.yml use o MariaDB. Já o utilizei várias vezes.

Parece que você está tentando não usar uma senha? Recomendo o uso de uma senha. O script pressupõe que haja uma senha.

2 curtidas

Entendi. Vou tentar definir uma senha e ver se funciona. Pelo que entendi, o script de importação ainda deve funcionar com o MariaDB. Se for o caso, continuarei a investigar. Obrigado pela ajuda rápida!

@pfaffman Era isso mesmo! Muito obrigado. Assim que organizar meu fórum, posso enviar um PR com uma versão para VB3, caso seja útil para alguém.

Esta também é minha instância de teste, então não há problema em postar os detalhes, pois ela será desmontada :slight_smile:

3 curtidas

Obrigado a todos pela ajuda, a migração correu bem na maior parte. Houve alguns anexos faltantes aqui e ali, mas no geral tudo saiu muito bem.

Para quem estiver lendo no futuro: migrei do Vb3.8.7.

Precisei fazer algumas edições na consulta SQL no vbulletin.rb, pois a estrutura do meu banco de dados não correspondia exatamente ao script, mas era bem próxima. Decidi abrir mão das legendas personalizadas para agilizar o processo.

Diff no GitHub: File fix other by canyon289 · Pull Request #1 · canyon289/discourse · GitHub

Para a instalação do MariaDB, que substitui o MySQL, usei o seguinte comando:

apt-get update && apt-get install mariadb-server-10.3 libmariadbd-dev

E para alterar a senha do MariaDB de nula para um valor, este link foi o mais completo:

Mais uma vez, não posso agradecer o suficiente às pessoas deste tópico e a todos os contribuidores do Discourse pelo código e ajuda!

5 curtidas

Acabei de finalizar uma migração, e ela atribuiu a todos os mais de 2.000 tópicos uma categoria herdada da instância do vBulletin 4. O sistema não permite que eu exclua essa categoria e defina todos esses tópicos migrados como sem categoria selecionada. “Não é possível excluir esta categoria porque ela possui 2322 tópicos”

Existe alguma solução alternativa para isso?

Faça a migração novamente ou altere a categoria dessas discussões. Com tantas, você precisará fazer isso pela linha de comando do Ruby.

1 curtida

Olá,

Não tenho certeza sobre o contexto disso.

Copie os anexos para sua instância do Discourse (para o caminho, verifique as configurações do VB4).

Alguém pode ajudar, por favor?

Oi,

Notei que há um script do vBulletin 5, mas não encontrei nenhum feedback sobre ele. As informações neste tópico também se aplicam a ele?

Obrigado!

1 curtida

O script deve funcionar de forma muito semelhante.

1 curtida

Executando uma importação para uma instalação do vB4, mas ela falha ao importar as categorias filhas. Tenham paciência comigo, pois sou iniciante em Rails/Ruby.

    Traceback (most recent call last):
        20: from script/import_scripts/vbulletin.rb:943:in `<main>'
        19: from /home/vagrant/discourse/script/import_scripts/base.rb:47:in `perform'
        18: from script/import_scripts/vbulletin.rb:84:in `execute'
        17: from script/import_scripts/vbulletin.rb:293:in `import_categories'
        16: from /home/vagrant/discourse/script/import_scripts/base.rb:403:in `create_categories'
        15: from /home/vagrant/discourse/script/import_scripts/base.rb:403:in `each'
        14: from /home/vagrant/discourse/script/import_scripts/base.rb:422:in `block in create_categories'
        13: from /home/vagrant/discourse/script/import_scripts/base.rb:454:in `create_category'
        12: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/suppressor.rb:48:in `save!'
        11: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:319:in `save!'
        10: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:366:in `with_transaction_returning_status'
         9: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:212:in `transaction'
         8: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:281:in `transaction'
         7: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/transaction.rb:278:in `within_new_transaction'
         6: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
         5: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'
         4: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:281:in `block in transaction'
         3: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:375:in `block in with_transaction_returning_status'
         2: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:319:in `block in save!'
         1: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/validations.rb:53:in `save!'
/home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/validations.rb:81:in `raise_validation_error': Validation failed: Slug is invalid (ActiveRecord::RecordInvalid)

Adicionei algumas saídas de depuração para investigar. O valor de slug na Categoria é nil.

A categoria parece ser válida quando itera sobre create_categories(children_categories) do |category|. Também estou logando opts, import_id e new_category (imediatamente antes de .save!) a partir de def create_category no base.rb. Tudo parece válido de acordo com o que as funções esperam.

Alguém já encontrou isso antes?

       37 / 53 ( 69.8%)  [345139 items/min]
category:
{"forumid"=>355, "title"=>"News", "description"=>"RSS Feed", "displayorder"=>6, "parentid"=>205}

Entering create_category...
opts:
{:id=>355, :name=>"News", :position=>6, :description=>"RSS Feed", :parent_category_id=>6}
import_id:
355

new_category:
#<Category id: nil, name: "News", color: "BF1E2E", topic_id: nil, topic_count: 0, created_at: nil, updated_at: nil, user_id: -1, topics_year: 0, topics_month: 0, topics_week: 0, slug: nil, description: nil, text_color: "FFF", read_restricted: false, auto_close_hours: nil, post_count: 0, latest_post_id: nil, latest_topic_id: nil, position: 6, parent_category_id: 6, posts_year: 0, posts_month: 0, posts_week: 0, email_in: nil, email_in_allow_strangers: false, topics_day: 0, posts_day: 0, allow_badges: true, name_lower: nil, auto_close_based_on_last_post: false, topic_template: nil, contains_messages: nil, sort_order: nil, sort_ascending: nil, uploaded_logo_id: nil, uploaded_background_id: nil, topic_featured_link_allowed: true, all_topics_wiki: false, show_subcategory_list: false, num_featured_topics: 3, default_view: nil, subcategory_list_style: "rows_with_featured_topics", default_top_period: "all", mailinglist_mirror: false, minimum_required_tags: 0, navigate_to_first_post_after_read: false, search_priority: 0, allow_global_tags: false, reviewable_by_group_id: nil, required_tag_group_id: nil, min_tags_from_required_group: 1>
    Traceback (most recent call last):
2 curtidas

Nosso desenvolvedor tentou o script, mas não conseguiu avançar muito. Alguém está interessado em fazer isso para nós em regime de consultoria?

2 curtidas

Claro, por favor me envie uma mensagem privada.

2 curtidas

Por favor, desculpe minha ignorância, mas como envio uma mensagem privada? Não achei óbvio. Ou você pode me enviar um e-mail diretamente para abboud at cedrus dot com.

Pergunta sobre importação: algumas postagens em nosso fórum baseado em vBulletin têm links para outras postagens no mesmo fórum. Esses links são convertidos durante a importação? Se não, o que acontece com eles? Eles são removidos?

1 curtida

Não consigo lembrar se a versão atual os reescreve. O script que tenho (que pretendo enviar como PR) os corrige.

2 curtidas