Migrar um fórum phpBB3 para Discourse

Eu tive o mesmo erro. Acredito que isso acontece quando se obtém um arquivo shared/standalone/import/mysql/imported desatualizado. Excluir esse arquivo resolveu o erro.

2 curtidas

A migração de senhas aparentemente não funcionou para mim.

Configurei passwords: true em shared/standalone/import/settings.yml antes de importar a partir de um dump do phpBB 3.0. Tenho isso em containers/app.yml:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discoursehosting/discourse-migratepassword.git

E executei ./launcher rebuild app após a importação. A importação parece ter funcionado completamente, exceto que não consigo fazer login com minha senha do phpBB. Não houve mensagens de erro relevantes que eu tenha notado durante a importação, e a senha tem 20 caracteres, o que deveria superar o limite mínimo de comprimento.

O que devo procurar para solucionar esse problema?

Um pouco mais de informação: vejo entradas import_pass na tabela user_custom_fields do banco de dados que correspondem aos hashes de senha que estavam no banco de dados do phpBB, então essa parte parece ter funcionado?

Edição: Ah, descobri o que aconteceu. Eu tinha esquecido completamente que havíamos migrado para autenticação LDAP no phpBB… As senhas que importei estavam perfeitamente ok, apenas com 15 anos de idade! Então agora preciso criar algo para extrair os hashes de senha do LDAP em vez disso… :slight_smile:

1 curtida

Olá a todos,

Alguém fez uma importação com anexos recentemente?

Os usuários e posts funcionam perfeitamente, mas os anexos não estão sendo adicionados aos posts.

Ainda tenho o bbcode em alguns posts.

O estranho é que o conteúdo da pasta files foi transferido para a pasta uploads do Discourse.

Primeiro, pensei que fosse porque a versão 3.0.12 do phpBB era muito antiga, então atualizei o phpBB para a versão 3.0.14, limpei o Discourse e a pasta de uploads e tentei a importação novamente. Sem sucesso.

Atualizei a versão do phpBB para a 3.2.0 (depois de executar o toolkit de suporte deles para limpar o banco de dados dos mods) em um servidor de teste, ainda sem sucesso.

Antes de investigar mais no meu banco de dados, queria ter certeza de que o script funciona para todos.

Não acho que cometi um erro no meu arquivo de configurações, mas talvez uma nova olhada possa ajudar.

# Este é um arquivo de exemplo de configurações para o importador phpBB3.

database:
  type: MySQL # atualmente apenas MySQL é suportado
  host: localhost
  port: 3306
  username: root
  password:
  schema: phpbb
  table_prefix: phpbb_ # Altere isso se o seu fórum estiver usando um prefixo diferente. Geralmente, todos os nomes de tabelas começam com phpbb_
  batch_size: 1000 # Não altere isso a menos que saiba o que está fazendo. O padrão (1000) deve funcionar perfeitamente.

import:
  # Defina isso se você estiver importando múltiplos fóruns phpBB em um único fórum Discourse.
  #
  # Por exemplo, ao importar múltiplos sites, prefixe todos os IDs importados
  # com 'first' para evitar conflitos. Execuções subsequentes de importação devem ter um
  # 'site_name' diferente.
  #
  # site_name: first
  #
  site_name:

  # Criar novas categorias
  #
  # Por exemplo, para criar uma categoria pai e uma subcategoria.
  #
  # new_categories:
  # - forum_id: foo
  #   name: Categoria Foo
  # - forum_id: bar
  #   name: Categoria Bar
  #   parent_id: foo
  #
  new_categories: []

  # Mapeamentos de categorias
  #
  # Por exemplo, tópicos das categorias 1 e 2 do phpBB serão importados
  # na nova categoria "Categoria Foo", tópicos da categoria 3 do phpBB
  # serão importados na subcategoria "Categoria Bar", tópicos da categoria 4
  # do phpBB serão mesclados na categoria 5 e a categoria 6 será ignorada.
  #
  # category_mappings:
  #   1: foo
  #   2: foo
  #   3: bar
  #   4: 5
  #   6: SKIP
  #
  category_mappings: {}

  # Mapeamentos de tags
  #
  # Por exemplo, tópicos importados da categoria 1 do phpBB serão marcados
  # com 'primeira-categoria', etc.
  #
  # tag_mappings:
  #   1:
  #   - primeira-categoria
  #   2:
  #   - segunda-categoria
  #   3:
  #   - terceira-categoria
  #
  tag_mappings:

  # Mapeamento de níveis de confiança por ranqueamento
  #
  # Mapeie os níveis de ranqueamento do phpBB 3.x para níveis de confiança
  # Usuários com ranqueamento de pelo menos 3000 terão TL3, etc.
  #
  # rank_mapping:
  #   trust_level_1: 200
  #   trust_level_2: 1000
  #   trust_level_3: 3000
  #
  rank_mapping:

  # AVISO: Não ative esta opção a menos que saiba o que está fazendo.
  # Provavelmente quebrará a conversão de BBCode para Markdown e diminuirá a velocidade da sua importação.
  use_bbcode_to_md: false

  # Este é o caminho para o diretório raiz da sua instalação atual do phpBB (ou uma cópia dela).
  # O importador espera encontrar os diretórios /files e /images dentro do diretório base.
  # Você precisa alterar isso para algo como /var/www/phpbb se não estiver usando o importador baseado em Docker.
  # Isso só é necessário se você quiser importar avatares, anexos ou smilies personalizados.
  phpbb_base_dir: /shared/import/data

  site_prefix:
    # isso é necessário para reescrever links internos nos posts
    original: ***.com   # sem http(s)://
    new: https://****.org       # com http:// ou https://

  # Ative isso se quiser redirecionar links antigos do fórum para os novos locais.
  permalinks:
    categories: true  # redireciona   /viewforum.php?f=1            para  /c/nome-da-categoria
    topics: true      # redireciona   /viewtopic.php?f=6&t=43       para  /t/nome-do-topico/81
    posts: false      # redireciona   /viewtopic.php?p=2455#p2455   para  /t/nome-do-topico/81/4
    # Adicione um prefixo a cada tipo de link, por exemplo, 'forum' para redirecionar /forum/viewtopic.php?f=6&t=43 para /t/nome-do-topico/81
    # Deixe em branco se o seu fórum não foi instalado em uma subpasta.
    prefix:

  avatars:
    uploaded: true  # importa avatares carregados
    gallery: false   # importa os avatares predefinidos oferecidos pelo phpBB
    remote: false   # AVISO: Isso pode diminuir consideravelmente a velocidade da sua importação. Tentará baixar avatares remotos.

  # Quando verdadeiro: Usuários anônimos são importados como usuários suspensos. Eles não podem fazer login e não têm endereço de e-mail.
  # Quando falso: O usuário do sistema será usado para todos os usuários anônimos.
  anonymous_users: true

  # Ative isso se quiser importar hashes de senha para usar o plugin "migratepassword".
  # Isso permitirá que os usuários façam login com sua senha atual.
  # O plugin está disponível em: https://github.com/discoursehosting/discourse-migratepassword
  passwords: false

  # Por padrão, todas as seguintes coisas são importadas. Você pode desativá-las definindo-as como falso.
  bookmarks: true
  attachments: true
  private_messages: false
  polls: false

  # Quando verdadeiro: cada usuário importado terá o nome de usuário original do phpBB como seu nome
  # Quando falso: o nome de cada usuário importado ficará em branco, a menos que o nome de usuário tenha sido alterado durante a importação
  username_as_name: false

  # Mapeie Emojis para smilies usados no phpBB. A maioria dos smilies padrão já possui um mapeamento, mas você pode sobrescrever
  # os mapeamentos aqui se não gostar de alguns deles.
  # A sintaxe de mapeamento é: emoji_name: 'smiley_no_phpbb'
  # Ou mapeie múltiplos smilies para um único Emoji: emoji_name: ['smiley1', 'smiley2']
  emojis:
    # aqui estão dois exemplos de mapeamentos...
    smiley: [':D', ':-D', ':grin:']
    heart: ':love:'
1 curtida

Isso ocorre especificamente se o import_phpbb3.sh não encontrar o arquivo phpbb_mysql.sql no caminho correto.

1 curtida

Presumo que isso também se aplique ao phpBB, pois estou tentando importar dumps que vão da versão v3.2.x à v3.3.3, mas faltam milhares de posts pais. Mesmo com várias execuções e vários backups sequenciais de versões. Para simplificar a depuração, o script poderia exibir a URL do ID da mensagem para o fórum antigo, para verificação de referência. (… viewtopic.php?p=57912)

1 curtida

Na verdade, já que estamos nisso, por que não registrar todas as linhas de importação com falha, junto com suas mensagens de erro, em um arquivo de despejo para compartilhar e analisar… só um pensamento…

Pelo menos em uma ocasião, há um tópico em viewtopic.php?f=3&t=1472, mas a primeira postagem, viewtopic.php?p=145185, foi excluída/removida/etc., e agora a primeira postagem do tópico é viewtopic.php?p=145186, que é “uma resposta”.

Talvez, para maior clareza, seja melhor indicar explicitamente se o tópico pai realmente não foi encontrado no despejo ou simplesmente ainda não foi importado para a reconstrução.

1 curtida

Eu ainda gostaria de receber um pouco de feedback para saber se todos conseguiram fazer uma importação completa com anexos recentemente. Não consigo fazer isso funcionar.

No momento, não sei se o problema vem do script ou do banco de dados do fórum phpBB :pray:

1 curtida

Você baixou as imagens e as colocou no local correto?

Não fiz isso recentemente, mas ficaria surpreso se não funcionasse.

1 curtida

Sim, verifiquei novamente as pastas e o arquivo de configurações. O estranho é que eles estão sendo importados nas pastas padrão/originais, mas não integrados nos posts.

Era um phpBB bem antigo, com alguns plugins. Fiz uma pequena limpeza e atualizei com sucesso do phpBB 3.0.12 para a versão mais recente, 3.1 ou 3.2, testando uma importação para cada versão, mas não funcionou. Pode ser um problema com o banco de dados. Por isso, se você conseguir realizar uma importação completa da próxima vez, seria ótimo ouvir de você. Se for o banco de dados do phpBB, farei uma investigação mais profunda com alguma ajuda; se for o script, posso esperar. Obrigado pela sua mensagem!

1 curtida

Não me lembro da última vez que fiz uma importação do phpBB3. Suspeito (mas não tenho como saber) que seja porque o script funciona tão bem.

Como eles estão sendo carregados no Discourse, o problema provavelmente está em como são referenciados nas postagens do phpBB. Você vê algum erro quando ele executa? Eles podem oferecer pistas. Ou talvez os plugins tenham alterado a forma como aparecem nas postagens e/ou no banco de dados. Provavelmente você terá que fazer uma investigação mais aprofundada.

2 curtidas

Tive alguns “arquivos ausentes” e “horário de postagem inválido”; tive esses problemas durante minhas importações anteriores, então não acho que seja algo grave. Também tive muitos “postagem pai não existe” na primeira execução, mas isso já foi mencionado anteriormente neste tópico, e uma segunda execução do script resolveu o problema.

Além disso, o script funcionou muito bem, sem nenhum problema grave.

Havia um plugin (principalmente um arquivo htaccess, aparentemente; eu não administrei esse fórum) para organizar os arquivos em subpastas (por mês e ano), mas eu os organizei na mesma pasta e as atualizações em uma versão limpa do phpBB funcionaram bem. Todos os arquivos importados estavam ativos no phpBB 3.1 e 3.2.

Vou investigar um pouco mais o banco de dados; talvez eu tenha um arquivo SQL de uma importação antiga. Vou comparar as tabelas de anexos e postagens no meu servidor de testes. Talvez tenha algo que eu tenha deixado passar.

4 curtidas

Você está correto, houve um bug em TextProcessor::process_attachments que impedia que os anexos fossem incorporados no Markdown da postagem. Eu abri um PR.

5 curtidas

Ótimo trabalho! Após as duas passagens, a importação ficou perfeita. Obrigado!

4 curtidas

Olá, acabei de importar cerca de 35 mil posts; durante a importação, notei muitas mensagens do tipo “Post pai XXXXXX não existe. Ignorando”, e quando o processo terminou, no fórum Discourse eu tinha todos (acho que sim) os “tópicos”, mas sem nenhuma resposta. Na prática, importou apenas o tópico, não os posts (exceto o primeiro, que continha o texto do próprio tópico).
Além disso, nenhum avatar foi importado, embora eu os tenha colocado na árvore correta dentro da pasta “import”.

O fórum original estava em phpBB2, importado regularmente e visível com todos os seus posts no phpBB3, mas eu excluí muitas mensagens antigas anteriormente; no entanto, tudo parece estar ok no phpBB3.

Alguma sugestão? Existe algum script de importação que eu possa verificar?

1 curtida

Isso acontece há algumas semanas/meses, mas não se preocupe: a importação será concluída após executar novamente o comando import_phpbb3.sh.

3 curtidas

Muito obrigado! Funcionou para as postagens, mas não para os avatares. Continuo procurando uma solução.

1 curtida

Li o tópico várias vezes e fiz algumas migrações, mas cada vez fiquei confuso com este plugin e encontrei bugs semelhantes. Estou na minha terceira migração e isso me deixou louco. Acho que a forma como este plugin funciona pode confundir os usuários que fazem migrações.

Deveria ser especificado em algum lugar que o plugin deve ser ativado no Discourse depois do processo de migração. Se já estiver escrito em algum lugar, talvez eu tenha perdido e talvez essa informação deva ser enfatizada.

Por favor, corrija-me se eu estiver errado. :slight_smile:

1 curtida

Estou relatando uma correção para a conversão de emoticons na importação do phpBB 3.0.7.

  • Alguns emoticons não foram convertidos corretamente para o Discourse:


    (mas não sempre, por alguma razão; alguns emojis idênticos eram exibidos às vezes, outras vezes não. Parecia aleatório no início)

  • Além disso, alguns emojis simplesmente desapareceram:
    phpBB:
    image
    Discourse:
    image

O problema veio da regex usada em replace_smilies(text) de

Regex com falha:

<!-- s(\S+) --><img src="{SMILIES_PATH}/.+?" alt=".*?" title=".*?" /><!-- s?:\S+ -->

Note como o início da regex não assume que há um caractere : depois:

<!-- s

Mas assume que há um no final da regex:

<!-- s?:

(Também me pergunto por que há um ? correspondendo a 0 ou 1 do caractere s no final da regex, onde não há no início da regex)

Removi este : da regex e meus dois problemas de emoticons pareceram completamente resolvidos.

No meu fórum phpbb, muitos emoticons de fato começavam com : como :mrgreen: ou :evil:, mas alguns não, como 8-) ou ;)
A regex antiga levava a capturas incorretas de emoticons. Por exemplo, múltiplos emoticons um ao lado do outro eram capturados como um único.


Regex corrigida:

<!-- s(\S+) --><img src="{SMILIES_PATH}/.+?" alt=".*?" title=".*?" /><!-- s?\S+ -->

Não estou corrigindo o código diretamente no repositório do Discourse porque não estou acostumado a usar git, e também não tenho certeza se isso impactaria importações de outras versões do phpBB. Não quero estragar nada.


De qualquer forma, se as pessoas encontrarem os mesmos problemas que eu, aqui está a solução.

4 curtidas

Outro problema corrigido que pode ajudar pessoas no meu caso durante uma migração do phpBB 3.0.7.

Por alguma razão, o conteúdo das postagens do meu fórum phpBB às vezes tinha múltiplos espaços em branco no início das linhas. Suspeito que alguns usuários gostam de apertar freneticamente a tecla de espaço sem prestar atenção ao escrever suas mensagens, e isso não tinha importância, pois a página renderizada ignorava esses múltiplos espaços:

Conteúdo de texto bruto do phpBB:

Salut tous  :)
  
     Alors voilà, le combi n'a pas roulé beaucoup ces derniers temps cause CT pas OK  :evil: mais il a fait ces 2000 kms sans broncher  ;)  
Maintenant le CT est OK . Merci L'Atelier Du Raz  8-')

    Je dois donc changer le joint-spi au bout de 40 000 kms en 10 ans  :roll: 
C'est un silicone et j'ai vu qu'il y avait des "doubles lèvres " !? 
What's About ?

             Je trouve ça un peu limte  :evil: 
Merci tous, fred

Página renderizada no navegador:


Mas durante a importação do phpBB → Discourse, esses espaços existentes foram convertidos em blocos de código:

É assim que deveria ser exibido:


Corrigi isso adicionando uma regex que remove espaços no início de cada linha

 text.gsub!(/^[^\\S\\r\\n]+/, "\\n")

Adicionei isso pouco antes de process_smilies(text) neste arquivo:


Outro problema que encontrei.
Neste código (ainda em text_processor.rb):

    def clean_bbcodes(text)
      # Muitos tags bbcode do phpbb têm um hash anexado a eles. Exemplos:
      #   [url=https://google.com:1qh1i7ky]clique aqui[/url:1qh1i7ky]
      #   [quote="cybereality":b0wtlzex]Algum texto.[/quote:b0wtlzex]
      text.gsub!(/:(?:\\w{8})\\]/, ']')

No meu banco de dados, os comprimentos desses hashes variam entre 5 e 8 caracteres, mas a regex remove apenas hashes que têm exatamente 8 caracteres. Portanto, minha importação manteve hashes mais curtos em vez de removê-los.
Corrigi isso alterando a regex para:

text.gsub!(/:(?:\\w{5,8})\\]/, ']')

Adiciono um pequeno problema, ainda no mesmo arquivo. A regex que remove as tags BBCode [color] espera um valor hexadecimal precedido por um # obrigatório. Mas [color] também aceita strings como “red”, “blue”, etc., como valor. Então modifiquei a regex original:

      # remove color tags
      text.gsub!(/\\[\\/?color(=#[a-z0-9]*)?\\]/i, "")

Adicionando um ? após o # para tornar o # opcional.
Código corrigido:

      # remove color tags
      text.gsub!(/\\[\\/?color(=#?[a-z0-9]*)?\\]/i, "")

Não sei se meus problemas são comuns em importações do phpBB, ou se são muito específicos para o meu caso. Se for o último, espero que minhas explicações aqui não sejam indesejadas ou supérfluas. Apenas me avisem se for o caso para que não fique estranho. :grinning_face_with_smiling_eyes:


Editar: É possível fazer com que, após uma migração, todos os tópicos existentes sejam marcados como “lidos” para todos os usuários existentes?

O objetivo é evitar que, após a migração, os usuários existentes clicando em tópicos existentes (e às vezes antigos) os levem para a primeira mensagem desses tópicos que eles já leram antes da migração.

Idealmente, os usuários existentes clicando em tópicos existentes abririam não a primeira, mas a última mensagem (desde o final da migração, é claro).

É um pequeno problema de qualidade de vida (e desaparecerá naturalmente após algumas semanas, à medida que os usuários usarem o fórum e lerem os tópicos), mas me foi solicitada essa sugestão.

7 curtidas

Obrigado por compartilhar essas correções!

Tive que fazer ajustes semelhantes em expressões regulares para migrações anteriores, então estas serão úteis para futuras importações do phpbb.

Este tópico pode ser útil How to mark imported posts as read - #2 by stuwest

3 curtidas