Downloads provenientes do S3 mesmo com DISCOURSE_S3_CDN_URL definido

I followed the guide at Using Object Storage for Uploads (S3 & Clones) to set up Backblaze B2 for upload storage and I’m seeing a strange problem.

If I create a thread and upload an image the img src is set to my S3_CDN_URL. If I upload a zip file the URL is at /uploads and redirect directly to my bucket instead of using the S3_CDN_URL. I do not have DISCOURSE_CDN_URL set - the guide indicate it doesn’t affect this issue.

Me relevant settings are:

  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

Why would zip files be handled differently than images?

1 curtida

Essa questão de armazenamento e sua configuração realmente é um grande desafio há muitos anos.

Eu estava armazenando minhas imagens no Aws S3. E então mudei meu armazenamento de volta para o servidor local. Agora, centenas de imagens desapareceram de repente.

Embora isso não seja uma resposta ou comentário direto à sua dúvida, estou apenas mostrando empatia em relação a problemas semelhantes.

Veja a configuração do site: Usar URL do CDN para todos os uploads

Use a URL do CDN para todos os arquivos carregados no s3, em vez de apenas para as imagens.

1 curtida

Obrigado.
Eu designei o trabalho para um amigo meu local. Ele está analisando isso.
Embora a seu pedido, eu selecionei esta opção agora. Usar URL CDN para todos os arquivos enviados para s3 em vez de apenas para imagens.

Mas parece haver algum outro problema. Ele mudou o armazenamento s3 para o servidor local. Agora, muitas das minhas postagens antigas, que tinham 10 fotos, cerca de metade estão sendo exibidas e a outra metade não. (exemplo de um tópico assim)

Ele trabalhará na resolução disso no próximo fim de semana.



Anteriormente, antes de perguntar a ele, ingenuamente selecionei a opção para ter todas as imagens incluídas em meus backups, depois restaurei esse backup pensando que restauraria as imagens para o servidor local, pensando que isso seria suficiente para mover todas as minhas imagens de s3 para o local.
Mas isso não é tão simples (como estou descobrindo em muitos tópicos relacionados no meta).

Desculpe. Estava a falar sobre o outro problema.

O seu, tenho a certeza, é muito mais complicado.

Isso é realmente complicado.

Penso que as imagens em falta nessa publicação se devem à inexistência do registo de Upload, pelo que terá de fazer algo para recuperar essa imagem. Posso estar enganado.

Se eu estiver certo, eis como resolvi o que penso ter sido um problema semelhante antes. Não ofereço suporte gratuito para além deste script.

def process_uploads
  begin
    # Read the list of filenames
    filenames = File.readlines('/shared/uploads/allfiles.txt').map(&:strip)
    count = 0

    filenames.each do |filename|
      # Prepend /shared to the filename
      filename.gsub!(/\.\//,"")
      full_path = File.join('/shared/uploads/default/original/', filename)

      begin
        # Check if path exists and is a regular file (not a directory)
        count += 1
        
        if File.exist?(full_path) && File.file?(full_path)
          # Open the file
          File.open(full_path, 'r') do |tempfile|
            # Create upload using the specified parameters
            u = UploadCreator.new(tempfile, 'imported', {}).create_for(-1)
            puts "#{count} -- #{u.id}: #{u.url}"
          end
        else
          puts "Warning: Path not found or is not a regular file: #{full_path}"
        end
      rescue => e
        puts "Error processing file #{full_path}: #{e.message}"
        # Continue with next file even if current one fails
        next
      end
    end
  rescue Errno::ENOENT
    puts "Error: Could not find files.txt"
  rescue => e
    puts "Error reading files.txt: #{e.message}"
  end
end

# Execute the processing
process_uploads;
1 curtida