Downloads kommen von S3, auch wenn DISCOURSE_S3_CDN_URL gesetzt ist

Ich habe den Leitfaden unter Configure an S3 compatible object storage provider for uploads befolgt, um Backblaze B2 für den Upload-Speicher einzurichten, und stelle ein seltsames Problem fest.

Wenn ich einen Thread erstelle und ein Bild hochlade, wird das img src auf meine S3_CDN_URL gesetzt. Wenn ich jedoch eine ZIP-Datei hochlade, lautet die URL /uploads und wird direkt in meinen Bucket umgeleitet, anstatt die S3_CDN_URL zu verwenden. Ich habe DISCOURSE_CDN_URL nicht gesetzt – der Leitfaden besagt, dass dies dieses Problem nicht beeinflusst.

Meine relevanten Einstellungen sind:

  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

Warum werden ZIP-Dateien anders behandelt als Bilder?

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.

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;