Limpieza y purga de cargas desde S3

:bookmark: Esta es una guía de referencia que describe cómo se eliminan automáticamente las cargas huérfanas y eliminadas de un sitio de Discourse. Esta guía se aplica tanto a los sitios de Discourse autoalojados como a los alojados.

:person_raising_hand: Nivel de usuario requerido: Administrador

¿Alguna vez te has preguntado qué sucede con los archivos e imágenes que se cargaron en un sitio de Discourse pero que ya no se referencian, o cómo eliminar cargas de un sitio? ¡Estás en el lugar correcto!

Es posible que necesites eliminar archivos e imágenes que se cargan en Discourse y que ya no se referencian. No hay una forma integrada de hacerlo desde la interfaz de usuario, sin embargo, Discourse tiene un trabajo automático de Sidekiq programado para eliminar cargas huérfanas y eliminadas llamado limpiar cargas.

Cargas huérfanas y eliminadas

:information_source: Las cargas huérfanas son archivos que se han cargado en un sitio de Discourse pero que ya no se referencian. Una carga se considera huérfana si y solo si no se referencia:

  • En la última versión de una publicación
  • En un borrador
  • En una publicación en cola
  • En una configuración de logotipo del sitio
  • En un emoji personalizado
  • En un tema
  • En una imagen de avatar/fondo/tarjeta de usuario
  • En un logotipo/imagen de fondo de categoría

:information_source: Las cargas se consideran “eliminadas” cuando se elimina el tema/la publicación que las contiene.

Limpieza de cargas

Para eliminar completamente una carga de Discourse, deberás hacer una de las siguientes cosas:

  • Forzar que la carga se vuelva huérfana eliminando cualquier referencia a ella. Esto se puede hacer editando el enlace de la carga en la publicación en la que se encuentra, o en cualquier otro lugar donde pueda referenciarse.
  • Eliminar todos y cada uno de los temas/publicaciones que contengan la carga, lo que hará que la carga se considere “eliminada”. Ten en cuenta que debes eliminar la imagen de la publicación antes de eliminar la publicación para que quede huérfana.

Todas las cargas huérfanas no referenciadas y las cargas eliminadas se eliminarán del almacenamiento (después de un período de gracia) una vez que se ejecute el trabajo limpiar cargas.

Configuraciones del sitio

Las siguientes configuraciones del sitio están disponibles en example.discourse.com/admin/site_settings/category/files para modificar cómo Discourse purga automáticamente las cargas.

  • clean up uploads: por defecto true
  • clean orphan uploads grace period hours: por defecto 48
  • purge deleted uploads grace period days: por defecto 30

La configuración clean up uploads se puede usar para habilitar o deshabilitar la eliminación automática de cargas huérfanas no referenciadas. clean orphan uploads grace period hours y purge deleted uploads grace period days son las dos configuraciones que controlan cuánto tiempo después de que una carga huérfana o eliminada detectada se purga y se elimina permanentemente del sitio.

Detalles adicionales sobre el trabajo clean up uploads están disponibles en el archivo clean_up_uploads.rb en GitHub.

Eliminación de cargas S3

:warning: La siguiente sección solo se aplica a los sitios de Discourse autoalojados.

:information_source: Si actualmente está alojado en nuestro Plan Empresarial, comuníquese con team@discourse.org si tiene alguna pregunta sobre la eliminación de cargas de su almacenamiento S3.

La limpieza de cargas huérfanas y eliminadas funciona de manera similar tanto para el almacenamiento local como para el S3. La única diferencia entre el almacenamiento local y el S3 es que la limpieza de las cargas S3 es manejada automáticamente por S3 a través de una política de marcadores de posición. Consulte Administración del ciclo de vida de su almacenamiento para obtener detalles adicionales sobre cómo se maneja esto en S3.

Por defecto, el trabajo clean up uploads incluye cargas S3. Sin embargo, si desea deshabilitar esta función, puede desmarcar la configuración del sitio s3 configure tombstone policy.

4 Me gusta

¿Es esto exacto? Creo que necesitas eliminar la imagen de la publicación antes de eliminar la publicación para dejarla huérfana.

Además, ¿debería este último ser purge deleted uploads grace period days?

1 me gusta

Habilitar la opción “limpiar subidas” suena aterrador con el mensaje de advertencia. Al convertir un foro existente a Discourse, esta configuración se deshabilitará. No todos los scripts de importación registrarán correctamente todas las subidas en las publicaciones, por lo que si la habilita, podría perder muchos archivos adjuntos.

Con la siguiente consulta puede verificar si las subidas están correctamente referenciadas por las publicaciones:

select p.post_id, u.id as upload_id
from (select id post_id, (regexp_matches(cooked, 'data-download-href=[^\\s]+/default/([a-z0-9]+)', 'g'))[1] upload_sha from posts where raw like '%upload://%' order by created_at) as p
join uploads u on u.sha1 = p.upload_sha
where not exists(select * from upload_references r where r.upload_id = u.id)

Eso no debería devolver ninguna fila si todo está correcto. Si utiliza esta consulta en el plugin Data Explorer también enlazará de forma ordenada a las publicaciones que tienen archivos adjuntos no referenciados.

Si la consulta anterior devuelve resultados, puede corregir las referencias de subidas faltantes con la siguiente consulta:

insert into upload_references(upload_id, target_type, target_id, created_at, updated_at)
select u.id, 'Post', p.post_id, u.created_at, u.updated_at
from (select id post_id, (regexp_matches(cooked, 'data-download-href=[^\\s]+/default/([a-z0-9]+)', 'g'))[1] upload_sha from posts where raw like '%upload://%' order by created_at) as p
join uploads u on u.sha1 = p.upload_sha
on conflict do nothing;

Necesitará acceso directo a la base de datos para realizar el cambio correctivo.