Minha Jornada de Migração do phpBB (postgresql)

posts excluídos logicamente são importados como posts regulares (e ficam visíveis). este é claramente um problema porque acho que os usuários excluem logicamente por padrão, e posts excluídos podem conter informações sensíveis.

colunas relevantes incluem: post_delete_user, post_delete_time, post_visibility, post_delete_reason

parece que post_visibility é a única relevante — os outros valores de coluna não são limpos se um post for excluído logicamente e depois restaurado. normal = 1, invisível = 2

minha correção é simplesmente descartar posts excluídos logicamente porque quem se importa.

execute isso em seu banco de dados de origem antes da migração:

DELETE FROM phpbb_posts WHERE post_visibility = 2;
1 curtida

tenho um pipeline de “migração contínua” improvisado. é um monte de scripts shell para fazer tarefas como:

  • puxar banco de dados phpbb, anexos, etc do servidor remoto
  • criar/gerenciar instâncias do discourse
  • site_settings específicos são aplicados quando uma instância do discourse é criada a partir de uma instância modelo
  • fazer backup/restaurar elas
  • executar a migração com um conjunto específico de scripts de importação de um repositório git
  • fazer tarefas pós-migração

basicamente, isso me permite trabalhar em uma instância do discourse pré-migração (dctemplate) com a qual eu brinco. continuo ajustando as configurações do discourse ao meu gosto.

diariamente, eu puxo do phpbb ativo existente e faço uma nova migração em uma nova instância do discourse (dcstaging) recém-criada a partir do modelo mais recente.

fazer isso leva horas, é claro, então também tenho um phpbb local rodando com um banco de dados muito pequeno que uso para fazer testes e melhorar os scripts de migração. posso fazer migrações relativamente rápidas para testar em outra instância do discourse (dcdev).

então, o fluxo de trabalho de teste durante o dia é como:

fiz algum trabalho no modelo, gosto de onde estou:

./dc_template_create.sh dctemplate

ops, cometi um erro no meu modelo. restaure-o para o estado anterior:

./dc_template_restore.sh dctemplate

faça uma migração rápida para testar algumas coisas:

# cria uma nova instância dcdev a partir de dctemplate (e aplica site_settings específicos a dcdev)
./dc_template_restore.sh dcdev dctemplate
./dc_migrate.sh dcdev # executa com o repositório de script de migração específico para essa instância

faça uma migração longa durante a noite a partir do phpbb real e ativo:

./dc_template_create.sh dctemplate
./dc_template_restore.sh dcstaging dctemplate

./phpbb_pull.sh
./dc_migrate.sh dcstaging
sleep 300
./dc_rake.sh dcstaging # tarefas extras pós-migração não tratadas pelo importador para (criar moderadores, marcação detalhada, mover alguns tópicos, etc.)

se alguém estiver interessado o suficiente, eu poderia limpá-lo um pouco e compartilhá-lo.

2 curtidas

O Discourse possui tags, então pode ser prudente aproveitá-las e remover subcategorias onde fizer sentido.

Minhas subcategorias tinham vários tópicos fixados/afixados, e quando combinadas em uma grande categoria, isso resulta em muitos tópicos fixados. É disruptivo.

Minha solução foi passar de categorias como:

Comida
- Americana
- Chinesa
- ...

para isto:

Comida
- Destaques

“Americana”, “Chinesa”, etc. se tornam tags, e todos os tópicos fixados vão para “Destaques” e são desfixados.

# Desafixa todos os tópicos fixados em uma categoria e os move para uma subcategoria
def move_pinned_topics_to_subcategory(category, subcategory_name)
  subcategory = Category.where(name: subcategory_name).find_by(parent_category_id: category.id)
  topics = Topic.where(category_id: category.id).where.not(pinned_at: nil)
  topics.each do |topic|
    topic.update(pinned_at: nil, pinned_globally: false, pinned_until: nil,
      category_id: subcategory.id) if not topic.title[/Sobre a categoria .+/]
  end
  Category.update_stats
end

food_cat = Category.find_by(name: 'Comida')
move_pinned_topics_to_subcategory(food_cat, 'Destaques')
4 curtidas

meu fórum também tem uma encarnação anterior e inativa (também phpBB) da qual temos um wget siterip, então estou trabalhando em um importador para isso. analisar arquivos html com nokogiri, ingerir em um banco de dados intermediário e, em seguida, trabalhar com a classe base do importador para obter linhas no discourse.

eu vi isto:

imagino que este seja um problema incomum, mas se mais alguém estiver enfrentando este problema, talvez eu dê um polimento extra e o compartilhe. me avise.

ou se alguém já fez isso e quer compartilhar comigo, isso é ainda melhor. eu ainda não avancei muito no projeto.

2 curtidas