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.
Nível de usuário necessário: Administrador
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
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:ouDiscourse: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
HojeouOntem: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