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.
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:
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…
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:'
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)
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.
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
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!
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.
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.
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.
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?
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.
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.
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.
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
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.
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.