Reassinar todos os posts que correspondam a um padrão

:bookmark: Este guia fornece instruções sobre como rebakear todos os posts no Discourse que correspondem a uma string específica ou expressão regular, utilizando o console do Rails para opções avançadas adicionais.

:person_raising_hand: Nível de usuário necessário: Administrador

:warning: Acesso ao console necessário

Deseja rebakear todos os posts que correspondem a uma string ou expressão regular? Vamos começar!

Acessando seu site

Para começar, conecte-se ao seu Droplet Discourse via SSH e entre no contêiner Docker da sua instância do Discourse:

cd /var/discourse
./launcher enter app

Rebakear todos os posts contendo uma string específica

Use o seguinte comando, substituindo padrão pela string que deseja corresponder. Esta pesquisa não diferencia maiúsculas de minúsculas.

rake posts:rebake_match["padrão"]

Por exemplo, para rebakear todos os posts contendo :slight_smile: em seu conteúdo bruto:

rake posts:rebake_match[":slight_smile:"]

Rebakear todos os posts correspondentes a uma expressão regular

:information_source: O PostgreSQL usa Expressões Regulares POSIX para realizar correspondências de regex. A correspondência não diferencia maiúsculas de minúsculas. Uma flag sensível a quebras de linha ((?n)) é aplicada automaticamente, o que significa que . não corresponderá a caracteres de nova linha e ^/$ corresponderão às bordas da linha.

Para expressões regulares, use este comando.

rake posts:rebake_match["padrão",regex]

Exemplos:

  • Rebakear posts contendo :slight_smile: ou Discourse:

    rake posts:rebake_match[":slight_smile:|Discourse",regex]
    
  • Rebakear posts começando com Hoje:

    rake posts:rebake_match["^Hoje",regex]
    
  • Rebakear posts começando com Hoje ou Ontem:

    rake posts:rebake_match["^(Hoje|Ontem)",regex]
    

Atraso opcional entre rebakes

Para adicionar um atraso de 5 segundos entre cada execução de rebake, modifique o comando da seguinte forma. Ajuste 5 para qualquer número de segundos necessário:

rake posts:rebake_match["padrão",string,5]

Avançado: Usando o console do Rails

Para tarefas onde a tarefa rake não é suficiente, use o console do Rails.

Acessando o console do Rails

Dentro do contêiner Docker, inicie o console do Rails:

rails c

Usando a tarefa rake rebake_uncooked

Defina os posts selecionados como ‘uncooked’ para um rebake. Saia do console do Rails após executar a configuração e, em seguida, execute o comando de rebake:

Para rebakear uma categoria inteira:

rails c
Post.joins(:topic).where('topics.category_id = 136').update_all('baked_version = NULL')
exit
rake posts:rebake_uncooked_posts

Executando um loop no console do Rails

Para operações granulares, selecione os posts como um array e rebakeie cada post diretamente.

Posts de um usuário específico

user = User.find_by_username('user123')
posts = Post.where(user_id: user.id)
posts.each do |p|
  p.rebake!
end

Posts contendo uma string específica

posts = Post.where("cooked like '%OldCDN%'")
posts.each do |p|
  p.rebake!
end
40 curtidas

Existe uma maneira fácil de desfazer o cozimento de todas as postagens/tópicos criados antes de uma data especificada?