Downloads kommen von S3, auch wenn DISCOURSE_S3_CDN_URL gesetzt ist

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 „Gefällt mir“

Dieses Speichersystem und seine Konfiguration sind in der Tat eine große Herausforderung über viele Jahre hinweg.

Ich habe meine Bilder auf Aws S3 gespeichert. Dann habe ich meinen Speicher wieder auf einen lokalen Server umgestellt. Jetzt sind plötzlich Hunderte von Bildern verschwunden.

Obwohl dies keine direkte Antwort oder Kommentar zu Ihrer Anfrage ist, möchte ich nur Mitgefühl für ähnliche Probleme zeigen.

Siehe Seiteneinstellung: S3 verwenden CDN-URL für alle Uploads

Verwenden Sie die CDN-URL für alle Dateien, die auf S3 hochgeladen werden, anstatt nur für Bilder.

1 „Gefällt mir“

Danke.
Ich habe den Auftrag an einen lokalen Freund von mir vergeben. Er kümmert sich darum.
Obwohl ich auf Ihre Nachfrage hin gerade diese Option ausgewählt habe: Use CDN URL for all the files uploaded to s3 instead of only for images.

Aber es scheint ein anderes Problem zu geben. Er hat den S3-Speicher auf einen lokalen Server verlagert. Jetzt werden viele meiner alten Beiträge, die 10 Fotos hatten, etwa die Hälfte angezeigt und die andere Hälfte nicht. (Beispiel für ein solches Thema)

Er wird am kommenden Wochenende daran arbeiten, dies zu lösen.



Zuvor, bevor ich ihn fragte, wählte ich naiv die Option, alle Bilder in meine Backups aufzunehmen, und stellte dann dieses Backup wieder her, in dem Glauben, dass dies die Bilder auf dem lokalen Server wiederherstellen würde, und dachte, dass dies ausreichen würde, um alle meine Bilder von S3 auf lokal zu verschieben.
Aber das ist nicht so einfach (wie ich auf vielen verwandten Themen in Meta feststelle).

Entschuldigung. Ich sprach über das andere Problem.

Ich bin mir ziemlich sicher, dass Ihres viel komplizierter ist.

Das ist in der Tat kompliziert.

Ich glaube, dass die fehlenden Bilder in diesem Beitrag daran liegen, dass der Upload-Datensatz nicht existiert. Sie müssen also etwas tun, um dieses Bild zurückzubekommen. Ich könnte mich irren.

Wenn ich richtig liege, hier ist, wie ich ein ähnliches Problem zuvor gelöst habe. Ich biete über dieses Skript hinaus keinen kostenlosen Support an.

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 „Gefällt mir“