Download provenienti da S3 anche con DISCOURSE_S3_CDN_URL impostato

Ho seguito la guida all’indirizzo Configure an S3 compatible object storage provider for uploads per configurare Backblaze B2 come archivio per i caricamenti e ho notato un problema strano.

Se creo un thread e carico un’immagine, l’attributo src dell’immagine è impostato sul mio S3_CDN_URL. Se carico un file zip, l’URL si trova in /uploads e reindirizza direttamente al mio bucket invece di utilizzare S3_CDN_URL. Non ho impostato DISCOURSE_CDN_URL: la guida indica che ciò non influisce su questo problema.

Le mie impostazioni rilevanti sono:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: "us-west-000"
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY: false
  DISCOURSE_S3_ENDPOINT: "https://s3.us-west-000.backblazeb2.com"
  DISCOURSE_S3_ACCESS_KEY_ID: "ID"
  DISCOURSE_S3_SECRET_ACCESS_KEY: "KEY"
  DISCOURSE_S3_CDN_URL: "https://devforum-b2-cdn.freetls.fastly.net"
  DISCOURSE_S3_BUCKET: "bucket-name"
  DISCOURSE_S3_BACKUP_BUCKET: "backup-bucket/devforum"
  DISCOURSE_BACKUP_LOCATION: s3

Perché i file zip vengono gestiti diversamente rispetto alle immagini?

Questa questione di archiviazione e la sua configurazione sono davvero una grande sfida da molti anni.

Stavo archiviando le mie immagini su Aws S3. Poi ho cambiato il mio storage back a un server locale. Ora ci sono centinaia di immagini scomparse improvvisamente.

Anche se questo non è una risposta o un commento diretto alla tua domanda, sto solo mostrando empatia verso problemi simili.

Vedi impostazioni del sito: Usa URL CDN S3 per tutti gli upload

Usa l’URL CDN per tutti i file caricati su s3, invece che solo per le immagini.

Grazie.
Ho assegnato il lavoro a un mio amico locale. Ci sta lavorando.
Anche se su tua richiesta ho selezionato questa opzione proprio ora. Usa l'URL CDN per tutti i file caricati su s3 invece che solo per le immagini.

Ma sembra esserci qualche altro problema. Ha spostato lo storage s3 sul server locale. Ora molti dei miei vecchi post, che avevano 10 foto, circa la metà vengono visualizzate e l’altra metà no. (esempio di un argomento simile)

Ci lavorerà per risolverlo, nel prossimo fine settimana.



In precedenza, prima di chiedergli, ho ingenuamente selezionato l’opzione per includere tutte le immagini nei miei backup, quindi ho ripristinato quel backup pensando che avrebbe ripristinato le immagini sul server locale, pensando che questo sarebbe stato sufficiente per spostare tutte le mie immagini da s3 a locale.
Ma non è così semplice (come sto scoprendo in molti argomenti correlati su meta).

Scusa. Stavo parlando dell’altro problema.

Il tuo, ne sono abbastanza sicuro, è molto più complicato.

Questo è effettivamente complicato.

Penso che le immagini mancanti in quel post siano perché il record di caricamento non esiste, quindi dovrai fare qualcosa per recuperare quell’immagine. Potrei sbagliarmi.

Se ho ragione, ecco come ho risolto quello che penso fosse un problema simile prima. Non offro supporto gratuito oltre a questo script.

def process_uploads
  begin
    # Leggi l'elenco dei nomi dei file
    filenames = File.readlines('/shared/uploads/allfiles.txt').map(&:strip)
    count = 0

    filenames.each do |filename|
      # Preponi /shared al nome del file
      filename.gsub!(/\.\//,"")
      full_path = File.join('/shared/uploads/default/original/', filename)

      begin
        # Verifica se il percorso esiste ed è un file regolare (non una directory)
        count += 1
        
        if File.exist?(full_path) && File.file?(full_path)
          # Apri il file
          File.open(full_path, 'r') do |tempfile|
            # Crea il caricamento utilizzando i parametri specificati
            u = UploadCreator.new(tempfile, 'imported', {}).create_for(-1)
            puts "#{count} -- #{u.id}: #{u.url}"
          end
        else
          puts "Attenzione: Percorso non trovato o non è un file regolare: #{full_path}"
        end
      rescue => e
        puts "Errore durante l'elaborazione del file #{full_path}: #{e.message}"
        # Continua con il file successivo anche se quello corrente fallisce
        next
      end
    end
  rescue Errno::ENOENT
    puts "Errore: Impossibile trovare files.txt"
  rescue => e
    puts "Errore durante la lettura di files.txt: #{e.message}"
  end
end

# Esegui l'elaborazione
process_uploads;