Comandi Rake: rebake_incremental (richiesta di funzionalità)

Gentili sviluppatori di Discourse,

RIF: rake posts:rebake (funzionalità futura)

rake posts:rebake                                                      # Aggiorna ogni post con l'ultima versione del markdown
rake posts:rebake_match[pattern,type,delay]                            # Rigenera tutti i post corrispondenti a una stringa/espressione regolare e opzionalmente ritarda il ciclo

A. Sarebbe utile disporre di una funzionalità di rigenerazione che consenta all’utente di rigenerare solo se l’ID del topic (o del post) è maggiore di un certo numero intero.

rake posts:rebake_incremental['topic_id', 34567]      # Rigenera se topic_id >= 34567
rake posts:rebake_incremental['post_id', 364123]      # Rigenera se post_id >= 364123

Motivazioni:

(1) Durante la rigenerazione, specialmente durante attività di migrazione, gli sviluppatori potrebbero aver già migrato topic/post; ma successivamente, quando aggiornano la migrazione con nuovi post (ad esempio in un forum attivo, quando la migrazione viene aggiornata), non esiste un modo (per quanto mi risulti) per specificare il punto di partenza nella rigenerazione. Il matching di pattern non è progettato per questo (a meno che non stia fraintendendo).

(2) Quando si lavora sulla messa a punto del testo proveniente da forum vecchi in attività di migrazione verso Discourse, ad esempio per adattare caratteri speciali dai vecchi forum affinché funzionino con il markdown in un forum di programmazione, o per gestire la ricorsione dei bbcode nei forum legacy, è utile rigenerare, ad esempio, gli ultimi 1000 post (anziché l’intero database).

B. Ancora più flessibile di A (specificare un operatore di confronto)

rake posts:rebake_incremental['topic_id', '>=', 34567]      # Rigenera se topic_id >= 34567
rake posts:rebake_incremental['post_id', '<', 364123]      # Rigenera se post_id < 364123

Generico:

rake posts:rebake_incremental[target, operator, id]

Dove:

  • target è o topic_id o post_id
  • operator è un operatore di confronto aritmetico
  • id è un numero intero, che rappresenta topic_id o post_id

Nota: Le attività di migrazione richiedono spesso molte iterazioni per essere eseguite correttamente, in particolare per quanto riguarda il testo e la codifica dei post dal forum originale a Discourse. Esistono molti caratteri utilizzabili nei forum non basati su markdown che, una volta migrati in un forum che elabora il markdown, causano problemi. Avere un maggiore controllo sul processo di rigenerazione, come illustrato, sarebbe di grande aiuto.

3 Mi Piace

C’è anche un altro task rake per il rebaking:

rake posts:rebake_uncooked_posts

Potresti fare tutto ciò che hai richiesto e anche di più eseguendo il seguente comando nella console di Rails prima di eseguire il task rake sopra indicato.

DB.exec(<<~SQL)
  UPDATE posts
  SET baked_version = NULL
  WHERE topic_id >= 34567
SQL

Basta adattare la condizione al tuo caso d’uso specifico. A mio avviso, questo è molto più flessibile di un task rake.

13 Mi Piace

Perfetto!!!

Grazie @gerhard!!

Sono completamente d’accordo, al 1000%!

Adoro questo rake task e questo metodo. È fantastico!

Grazie ancora!!


Nota: Una delle grandi cose di questo metodo suggerito da @gerhard è che possiamo cuocere gli ultimi 1000 post (ad esempio) e, se ci piacciono i risultati ottenuti, procedere a cuocere il resto dei 999.000 post. Questa è davvero una funzionalità preziosa.

Grazie ancora


5 Mi Piace