Tarefas Rake: rebake_incremental (solicitação de recurso)

Prezados Desenvolvedores do Discourse,

RE: rake posts:rebake (recurso futuro)

rake posts:rebake                                                      # Atualiza cada post com a última versão do markdown
rake posts:rebake_match[pattern,type,delay]                            # Rebake de todos os posts que correspondem à string/regex e, opcionalmente, atrasa o loop

A. Seria ótimo ter um recurso de rebake que permita ao usuário executar o rebake apenas se o ID do tópico (ou ID do post) for maior que um determinado número inteiro.

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

Motivos:

(1) Ao realizar o rebake, especialmente durante tarefas de migração, os desenvolvedores podem já ter migrado tópicos/posts; mas, mais tarde, ao atualizar a migração com novos posts (por exemplo, em um fórum ativo, quando a migração é atualizada), não há como (que eu saiba) especificar o ponto de partida no processo de renderização. A correspondência de padrões não foi projetada para isso (a menos que eu esteja entendendo mal).

(2) Ao trabalhar no ajuste fino de textos de fóruns antigos para o Discourse em tarefas de migração, por exemplo, ajustando caracteres especiais de fóruns antigos para funcionarem com markdown em um fórum de programação, ou ajustando bbcode recursivo em fóruns legados, é útil executar o rebake, por exemplo, nos últimos 1000 posts (em vez de todo o banco de dados).

B. Ainda mais flexível que A (especificar um operador de comparação)

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

Genérico:

rake posts:rebake_incremental[target, operator, id]  

Onde:

  • target é either o topic_id ou o post_id
  • operator é um operador de comparação aritmética
  • id é um número inteiro, seja topic_id ou post_id

Nota: Tarefas de migração frequentemente exigem muitas iterações para serem feitas corretamente; especialmente no que diz respeito ao texto e à codificação dos posts do fórum original para o Discourse. Existem muitos caracteres que podem ser usados em fóruns baseados em não-markdown e que, ao serem migrados para um fórum processado com markdown, causam problemas. Ter mais controle sobre o processo de rebake, conforme ilustrado, ajudaria.

3 curtidas

Também existe outra tarefa do Rake para refazer o cozimento:

rake posts:rebake_uncooked_posts

Você pode fazer tudo o que solicitou e até mais, executando o seguinte comando no console do Rails antes de executar a tarefa do Rake acima.

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

Basta ajustar a condição ao seu caso de uso específico. Na minha opinião, isso é muito mais flexível do que uma tarefa do Rake.

13 curtidas

Perfeito!!!

Obrigado, @gerhard!!

Concordo totalmente, 1000%!

Adoro essa tarefa rake e o método. É simplesmente ótimo!

Obrigado novamente!!


Nota: Uma das grandes vantagens desse método sugerido por @gerhard é que podemos assar os últimos 1000 posts (por exemplo) e, se gostarmos dos resultados, prosseguir para assar os outros 999.000 posts. Essa é realmente uma funcionalidade preciosa.

Obrigado novamente


5 curtidas