Pulizia dei caricamenti ed eliminazione dei caricamenti da S3

:bookmark: Questa è una guida di riferimento che descrive come i caricamenti orfani ed eliminati vengono automaticamente rimossi da un sito Discourse. Questa guida si applica sia ai siti Discourse auto-ospitati che a quelli ospitati.

:person_raising_hand: Livello utente richiesto: Amministratore

Ti sei mai chiesto cosa succede ai file e alle immagini caricati su un sito Discourse ma non più referenziati, o come rimuovere i caricamenti da un sito? Sei nel posto giusto!

Potrebbe essere necessario eliminare file e immagini caricati su Discourse che non sono più referenziati. Non esiste un metodo integrato per farlo dall’interfaccia utente; tuttavia, Discourse dispone di un lavoro automatico Sidekiq pianificato per rimuovere i caricamenti orfani ed eliminati chiamato clean up uploads.

Caricamenti orfani ed eliminati

:information_source: I caricamenti orfani sono file che sono stati caricati su un sito Discourse ma non sono più referenziati. Un caricamento è considerato orfano se e solo se non è referenziato:

  • Nell’ultima versione di un post
  • In una bozza
  • In un post in coda
  • In un’impostazione del sito (ad esempio, logo, favicon)
  • In un’emoji personalizzata
  • In un tema
  • In un’immagine avatar/sfondo/card dell’utente
  • In un’immagine logo/sfondo di una categoria
  • In un’immagine di un badge
  • In un’immagine di flair di un gruppo

:information_source: I caricamenti sono considerati “eliminati” quando il topic/post in cui sono contenuti viene eliminato.

Pulizia dei caricamenti

Per rimuovere completamente un caricamento da Discourse, dovrai fare una delle seguenti cose:

  • Forzare il caricamento a diventare orfano rimuovendo qualsiasi riferimento ad esso. Questo può essere fatto modificando il link del caricamento dal post in cui si trova, o da qualsiasi altro luogo in cui il caricamento potrebbe essere referenziato.
  • Eliminare tutti i topic/post contenenti il caricamento, facendo sì che il caricamento sia considerato “eliminato”. Nota che devi rimuovere l’immagine dal post prima di eliminare il post per renderlo orfano.

Tutti i caricamenti orfani non referenziati e i caricamenti eliminati verranno quindi rimossi dall’archiviazione (dopo un periodo di grazia) una volta eseguito il lavoro clean up uploads.

Impostazioni del sito

Le seguenti impostazioni del sito sono disponibili all’indirizzo example.discourse.com/admin/site_settings/category/files per modificare come Discourse rimuove automaticamente i caricamenti.

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

L’impostazione clean up uploads può essere utilizzata per abilitare o disabilitare l’eliminazione automatica dei caricamenti orfani non referenziati. L’impostazione clean orphan uploads grace period hours controlla quanto tempo dopo un caricamento orfano rilevato viene rimosso. L’impostazione purge deleted uploads grace period days controlla quanto tempo i caricamenti tombstonati (eliminati) vengono conservati prima di essere rimossi permanentemente; questo è gestito da un lavoro pianificato separato purge deleted uploads.

Ulteriori dettagli sul lavoro clean up uploads sono disponibili nel file clean_up_uploads.rb su GitHub.

Rimozione dei caricamenti S3

:warning: La sezione seguente è applicabile solo ai siti Discourse auto-ospitati.

:information_source: Se sei attualmente ospitato sul nostro Piano Enterprise, contatta team@discourse.org se hai domande sulla cancellazione dei caricamenti dal tuo archivio S3.

La pulizia dei caricamenti orfani ed eliminati funziona in modo simile sia per l’archiviazione locale che per quella S3. L’unica differenza tra l’archiviazione locale e quella S3 è che la pulizia dei caricamenti S3 è gestita automaticamente da S3 tramite una policy tombstone. Consulta Gestione del ciclo di vita dell’archiviazione per ulteriori dettagli su come questo viene gestito su S3.

Per impostazione predefinita, il lavoro clean up uploads include i caricamenti S3. Tuttavia, se desideri disabilitare questa funzione, puoi deselezionare l’impostazione del sito s3 configure tombstone policy.

4 Mi Piace

È corretto? Penso che sia necessario rimuovere l’immagine dal post prima di eliminare il post per orfaniarlo.

Inoltre, quest’ultimo dovrebbe essere purge deleted uploads grace period days?

1 Mi Piace

Abilitare la funzione “pulisci caricamenti” suona spaventoso con il messaggio di avviso. Durante la conversione di un forum esistente a Discourse, questa impostazione verrà disabilitata. Non tutti gli script di importazione registreranno correttamente tutti i caricamenti nei post, quindi se la abiliti, potresti perdere molti allegati.

Con la seguente query puoi verificare se i caricamenti sono correttamente referenziati dai post:

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)

Questa query non dovrebbe restituire alcuna riga se tutto è corretto. Se utilizzi questa query nel plugin Data Explorer, collegherà anche in modo ordinato i post che hanno allegati non referenziati.

Se la query sopra restituisce risultati, puoi correggere i riferimenti mancanti ai caricamenti con la seguente query:

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;

Avrai bisogno di accesso diretto al database per apportare la modifica correttiva.