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.
Nivel de usuario requerido: Administrador
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
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:oDiscourse: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
TodayoYesterday: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