Il mio viaggio di migrazione phpBB (postgresql)

i post eliminati in modo soft vengono importati come post normali (e sono visibili). questo è chiaramente un problema perché penso che gli utenti eliminino in modo soft per impostazione predefinita e i post eliminati possano contenere informazioni sensibili.

le colonne pertinenti includono: post_delete_user, post_delete_time, post_visibility, post_delete_reason

sembra che post_visibility sia l’unica pertinente: gli altri valori delle colonne non vengono cancellati se un post viene eliminato in modo soft e poi ripristinato. normale = 1, invisibile = 2

la mia soluzione è semplicemente scartare i post eliminati in modo soft perché a chi importa.

esegui questo sul tuo database di origine prima della migrazione:

DELETE FROM phpbb_posts WHERE post_visibility = 2;
1 Mi Piace

Ho una pipeline di “migrazione continua” per poveri. È un insieme di script di shell per eseguire attività come:

  • estrarre il database phpbb, gli allegati, ecc. dal server remoto
  • creare/gestire istanze di discourse
  • specifiche site_settings vengono applicate quando un’istanza di discourse viene creata da un’istanza template
  • eseguirne il backup/ripristino
  • eseguire la migrazione con un set specifico di script di importazione da un repository git
  • eseguire attività post-migrazione

Fondamentalmente questo mi permette di lavorare su un’istanza di discourse dctemplate pre-migrazione con cui gioco. Continuo a modificare le impostazioni di discourse a mio piacimento.

Ogni notte, estraggo dal phpbb live esistente ed eseguo una nuova migrazione su una nuova istanza di discourse (dcstaging) appena creata dal template più recente.

Fare ciò richiede ore, ovviamente, quindi ho anche un phpbb locale in esecuzione con un database molto piccolo che uso per fare test e migliorare gli script di migrazione. Posso eseguire migrazioni relativamente veloci per testare su un’altra istanza di discourse (dcdev).

quindi il flusso di lavoro di test diurno è simile a

Ho fatto del lavoro sul template, mi piace dove sono:

./dc_template_create.sh dctemplate

ops, ho fatto un errore sul mio template. ripristinalo allo stato precedente:

./dc_template_restore.sh dctemplate

esegui una migrazione veloce per testare alcune cose

# crea una nuova istanza dcdev da dctemplate (e applica specifiche site_settings a dcdev)
./dc_template_restore.sh dcdev dctemplate
./dc_migrate.sh dcdev # esegue con il repository di script di migrazione specifico per quell'istanza

esegui una lunga migrazione durante la notte dal vero phpbb live:

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

./phpbb_pull.sh
./dc_migrate.sh dcstaging
sleep 300
./dc_rake.sh dcstaging # attività post-migrazione aggiuntive non gestite dall'importer per (creazione moderatori, tagging dettagliato, spostamento di alcuni argomenti, ecc.)

se qualcuno è abbastanza interessato, potrei ripulirlo un po’ e condividerlo.

2 Mi Piace

Discourse ha i tag, quindi potrebbe essere saggio sfruttarli e rimuovere le sottocategorie dove ha senso.

Le mie sottocategorie avevano ciascuna diversi argomenti fissati/incollati, e quando combinati in una grande categoria, ci sono troppi argomenti fissati. È dirompente.

La mia soluzione è stata di passare da categorie come:

Cibo
- Americano
- Cinese
- ...

a questo:

Cibo
- In primo piano

Americano, Cinese, ecc. diventano tag, e tutti gli argomenti fissati vanno in “In primo piano” e vengono rimossi dai fissati.

# Rimuove tutti gli argomenti fissati in una categoria e li sposta in una sottocategoria
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[/About the .+ category/]
  end
  Category.update_stats
end

food_cat = Category.find_by(name: 'Cibo')
move_pinned_topics_to_subcategory(food_cat, 'In primo piano')
4 Mi Piace

il mio forum ha anche un’incarnazione precedente e morta (anch’essa phpBB) di cui abbiamo un wget siterip, quindi sto lavorando a un importatore per quello. analizza i file html con nokogiri, ingerisci in un database intermedio e quindi lavora con la classe base dell’importatore per inserire le righe in discourse.

ho visto questo:

immagino che questo sia un problema insolito, ma se qualcun altro sta affrontando questo problema, forse ci metterò un po’ più di impegno e lo condividerò. fammelo sapere.

o se qualcuno l’ha già fatto e vuole condividerlo con me, è ancora meglio. non sono ancora molto avanti nel progetto.

2 Mi Piace