Pulizia degli upload e eliminazione degli upload da S3

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

:person_raising_hand: Livello utente richiesto: Amministratore

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

Potresti dover eliminare file e immagini caricati su Discourse che non sono più referenziati. Non esiste un modo integrato per farlo dall’interfaccia utente, tuttavia, Discourse ha un processo Sidekiq automatico programmato 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 solo se non è referenziato:

  • Nell’ultima versione di un post
  • In una bozza
  • In un post in coda
  • In un’impostazione del logo del sito
  • In un’emoji personalizzata
  • In un tema
  • Nell’immagine del profilo/sfondo/scheda di un utente
  • Nell’immagine del logo/sfondo di una categoria

:information_source: I caricamenti sono considerati “eliminati” quando l’argomento/post in cui sono contenuti viene eliminato.

Pulizia dei caricamenti

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

  • Forzare l’orfanezza del caricamento rimuovendo qualsiasi riferimento ad esso. Questo può essere fatto modificando il link del caricamento nel post in cui si trova, o in qualsiasi altro luogo in cui il caricamento potrebbe essere referenziato.
  • Eliminare tutti gli argomenti/post contenenti il caricamento, causando la considerazione del caricamento come “eliminato”. Nota che devi rimuovere l’immagine dal post prima di eliminare il post per renderlo orfano.

Tutti i caricamenti orfani non referenziati ed eliminati verranno quindi rimossi dallo storage (dopo un periodo di grazia) una volta che il processo clean up uploads sarà in esecuzione.

Impostazioni del sito

Le seguenti impostazioni del sito sono disponibili su example.discourse.com/admin/site_settings/category/files per modificare come Discourse elimina automaticamente i caricamenti.

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

L’impostazione clean up uploads può essere utilizzata per abilitare o disabilitare l’eliminazione automatica dei caricamenti orfani non referenziati. clean orphan uploads grace period hours e purge deleted uploads grace period days sono le due impostazioni che controllano per quanto tempo dopo un caricamento orfano o eliminato rilevato viene eliminato e rimosso permanentemente dal sito.

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

Eliminazione dei caricamenti S3

:warning: La sezione seguente è applicabile solo ai siti Discourse self-hosted.

:information_source: Se sei attualmente ospitato sul nostro Piano Enterprise, contatta team@discourse.org se hai domande sull’eliminazione dei caricamenti dal tuo storage S3.

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

Per impostazione predefinita, il processo clean up uploads include i caricamenti S3. Tuttavia, se desideri disabilitare questa funzionalità, 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.