Tâches Rake : rebake_incremental (demande de fonctionnalité)

Chers développeurs de Discourse,

RE : rake posts:rebake (fonctionnalité future)

rake posts:rebake                                                      # Mettre à jour chaque publication avec le dernier markdown
rake posts:rebake_match[pattern,type,delay]                            # Rebake toutes les publications correspondant à une chaîne/regex et optionnellement retarder la boucle

A. Il serait idéal d’avoir une fonctionnalité de rebake permettant à l’utilisateur de ne rebaker que si l’ID du sujet (ou l’ID de la publication) est supérieur à un certain entier.

rake posts:rebake_incremental['topic_id', 34567]      # Rebake si topic_id >= 34567
rake posts:rebake_incremental['post_id', 364123]      # Rebake si post_id >= 364123

Raisons :

(1) Lors du rebake, surtout dans le cadre de tâches de migration, les développeurs peuvent déjà avoir migré des sujets/publications ; mais plus tard, lorsqu’ils mettent à jour la migration avec de nouvelles publications (par exemple dans un forum actif, lorsque la migration est mise à jour), il n’existe aucun moyen (à ma connaissance) de spécifier le point de départ dans le processus de bake. La correspondance de motifs n’est pas conçue pour cela (sauf si je mal interprète).

(2) Lors de l’ajustement fin du texte provenant d’anciens forums vers Discourse dans des tâches de migration, par exemple pour adapter des caractères spéciaux d’anciens forums afin qu’ils fonctionnent avec le Markdown dans un forum de programmation, ou pour ajuster des balises BBCode récursives dans des forums hérités, il est utile de rebaker, par exemple, les 1000 dernières publications (plutôt que toute la base de données).

B. Encore plus flexible que A (spécifier un opérateur de comparaison)

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

Générique :

rake posts:rebake_incremental[cible, opérateur, id]  

Où :

  • cible est soit topic_id, soit post_id
  • opérateur est un opérateur de comparaison arithmétique
  • id est un entier, soit topic_id, soit post_id

Remarque : Les tâches de migration nécessitent souvent de nombreuses itérations pour être correctement exécutées, en particulier pour le texte et le codage des publications du forum original vers Discourse. De nombreux caractères utilisés dans des forums non basés sur Markdown peuvent, lors de leur migration vers un forum traité avec Markdown, causer des problèmes. Avoir un meilleur contrôle sur le processus de rebake, comme illustré, serait d’une grande aide.

3 « J'aime »

Il existe également une autre tâche Rake pour la recuisson :

rake posts:rebake_uncooked_posts

Vous pouvez effectuer tout ce que vous avez demandé, et même plus, en exécutant la commande suivante dans la console Rails avant d’exécuter la tâche Rake ci-dessus.

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

Ajustez simplement la condition à votre cas d’usage spécifique. À mon avis, c’est beaucoup plus flexible qu’une tâche Rake.

13 « J'aime »

Parfait!!!

Merci @gerhard !!

Je suis tout à fait d’accord, à 1000 % !

J’adore cette tâche rake et cette méthode. C’est vraiment génial !

Merci encore !!


Note : L’un des grands avantages de cette méthode suggérée par @gerhard est que nous pouvons préchauffer les 1000 derniers messages (par exemple) et, si les résultats nous conviennent, procéder ensuite au préchauffage des 999 000 autres messages. C’est vraiment une fonctionnalité précieuse.

Merci encore


5 « J'aime »