Limpieza de subidas y purga de subidas de S3

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

:person_raising_hand: Nivel de usuario requerido: Administrador

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

Puede que necesites eliminar archivos e imágenes que se subieron a Discourse y que ya no tienen referencias. No existe una forma integrada de hacer esto desde la interfaz de usuario; sin embargo, Discourse cuenta con un trabajo automático de Sidekiq programado para eliminar las subidas huérfanas y eliminadas llamado clean up uploads.

Subidas huérfanas y eliminadas

:information_source: Las subidas huérfanas son archivos que se han subido a un sitio Discourse pero que ya no tienen referencias. Una subida se considera huérfana si y solo si no tiene referencias:

  • En la última versión de una publicación
  • En un borrador
  • En una publicación en cola
  • En una configuración del sitio (por ejemplo, logotipo, favicon)
  • En un emoji personalizado
  • En un tema
  • En la imagen de avatar/fondo/tarjeta de un usuario
  • En la imagen de logotipo/fondo de una categoría
  • En la imagen de una insignia
  • En la imagen de distintivo de un grupo

:information_source: Las subidas se consideran “eliminadas” cuando se elimina el tema/publicación en el que están contenidas.

Limpieza de subidas

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

  • Forzar que la subida se convierta en huérfana eliminando cualquier referencia a la misma. Esto se puede hacer editando el enlace de la subida fuera de la publicación en la que se encuentra, o de cualquier otro lugar donde la subida pueda estar referenciada.
  • Eliminar todos los temas/publicaciones que contengan la subida, lo que hará que la subida se considere “eliminada”. Ten en cuenta que debes eliminar la imagen de la publicación antes de eliminar la publicación para que se convierta en huérfana.

Todas las subidas huérfanas sin referencia y las subidas eliminadas se eliminarán del almacenamiento (después de un período de gracia) una vez que se ejecute el trabajo clean up uploads.

Configuración del sitio

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

  • clean up uploads: valor predeterminado true
  • clean orphan uploads grace period hours: valor predeterminado 48
  • purge deleted uploads grace period days: valor predeterminado 30

La configuración clean up uploads se puede utilizar para habilitar o deshabilitar la eliminación automática de subidas huérfanas sin referencia. La configuración clean orphan uploads grace period hours controla cuánto tiempo después de detectar una subida huérfana se elimina. La configuración purge deleted uploads grace period days controla cuánto tiempo se conservan las subidas marcadas como eliminadas (tombstoned) antes de ser eliminadas permanentemente; esto lo maneja un trabajo programado separado llamado purge deleted uploads.

Información adicional sobre el trabajo clean up uploads está disponible en el archivo clean_up_uploads.rb en GitHub.

Eliminación de subidas en S3

:warning: La siguiente sección solo es aplicable a sitios Discourse autohospedados.

:information_source: Si actualmente estás alojado en nuestro Plan Empresarial, por favor contacta a team@discourse.org si tienes alguna pregunta sobre la eliminación de subidas de tu almacenamiento S3.

La limpieza de subidas huérfanas y eliminadas funciona de manera similar tanto para el almacenamiento local como para S3. La única diferencia entre el almacenamiento local y S3 es que la limpieza de las subidas en S3 se maneja automáticamente por S3 mediante una política de tumba (tombstone policy). Consulta Gestión del ciclo de vida de tu almacenamiento para obtener más detalles sobre cómo se maneja esto en S3.

Por defecto, el trabajo clean up uploads incluye las subidas en S3. Sin embargo, si deseas deshabilitar esta función, puedes 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.