Recargar todas las publicaciones que coincidan con un patrón

:bookmark: Esta guía proporciona instrucciones sobre cómo rebakear todas las publicaciones en Discourse que coincidan con una cadena específica o una expresión regular, utilizando la consola de Rails para opciones avanzadas adicionales.

:person_raising_hand: Nivel de usuario requerido: Administrador

:warning: Se requiere acceso a la consola

¿Quieres rebakear todas las publicaciones que coincidan con una cadena o una expresión regular? ¡Comencemos!

Accediendo a tu sitio

Para comenzar, conecta a tu Droplet de Discourse mediante SSH e ingresa al contenedor Docker de tu instancia de Discourse:

cd /var/discourse
./launcher enter app

Rebakear todas las publicaciones que contengan una cadena específica

Utiliza el siguiente comando, reemplazando pattern con la cadena que deseas buscar. Esta búsqueda no distingue entre mayúsculas y minúsculas.

rake posts:rebake_match["pattern"]

Por ejemplo, para rebakear todas las publicaciones que contengan :slight_smile: en su contenido crudo:

rake posts:rebake_match[":slight_smile:"]

Rebakear todas las publicaciones que coincidan con una expresión regular

:information_source: PostgreSQL utiliza expresiones regulares POSIX para realizar la coincidencia de regex. La coincidencia no distingue entre mayúsculas y minúsculas. Se aplica automáticamente un indicador sensible a las nuevas líneas ((?n)), lo que significa que . no coincidirá con caracteres de nueva línea y ^/$ coincidirán en los límites de línea.

Para expresiones regulares, utiliza este comando.

rake posts:rebake_match["pattern",regex]

Ejemplos:

  • Rebakear publicaciones que contengan :slight_smile: o Discourse:

    rake posts:rebake_match[":slight_smile:|Discourse",regex]
    
  • Rebakear publicaciones que comiencen con Today:

    rake posts:rebake_match["^Today",regex]
    
  • Rebakear publicaciones que comiencen con Today o Yesterday:

    rake posts:rebake_match["^(Today|Yesterday)",regex]
    

Retraso opcional entre rebakeos

Para añadir un retraso de 5 segundos entre cada ejecución de rebakeo, modifica el comando de la siguiente manera. Ajusta 5 al número de segundos que necesites:

rake posts:rebake_match["pattern",string,5]

Avanzado: Usando la consola de Rails

Para tareas donde la tarea rake no es suficiente, utiliza la consola de Rails.

Accediendo a la consola de Rails

Desde dentro del contenedor Docker, inicia la consola de Rails:

rails c

Usando la tarea rake rebake uncooked

Establece las publicaciones objetivo como ‘uncooked’ para un rebakeo. Sal de la consola de Rails después de ejecutar la configuración y luego ejecuta el comando de rebakeo:

Para rebakear una categoría completa:

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

Realizando un bucle en la consola de Rails

Para realizar operaciones granulares, selecciona las publicaciones como un array y rebakea cada publicación directamente.

Publicaciones de un usuario en particular

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

Publicaciones que contienen una cadena específica

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

¿Hay alguna forma sencilla de “descocinar” todas las publicaciones/hilos que se crearon antes de una fecha determinada?