ich habe ein seltsames Problem mit Discourse + S3-Speicher.
Beim Hochladen von Avataren erhalte ich eine Fehlermeldung wie die untenstehende – obwohl die Datei vorhanden im S3-Bucket ist und über eine gültige s3_cdn_url erreichbar ist.
Uploads für Beiträge und Anhänge funktionieren einwandfrei. Das Einzige, was fehlschlägt, sind Benutzeravatar-Uploads.
Fehlermeldung von gig.ovh/logs
Nachricht (2 Kopien gemeldet)
Datei im Speicher unter der URL nicht gefunden: //gig.s3.ru-1.storage.selcloud.ru/original/1X/fd42dfa3362b66090450f2ae40f0917193fcd355.jpeg
Backtrace
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active\ _support/broadcast\ _logger.rb:134:in `block in error'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active\ _support/broadcast\ _logger.rb:231:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active\ _support/broadcast\ _logger.rb:134:in `error'
/var/www/discourse/app/models/optimized_image.rb:91:in `block in create\ _for'
/var/www/discourse/app/models/optimized\ _image.rb:19:in `block (2 levels) in lock'
/var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize'
/var/www/discourse/lib/distributed\ _mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed\ _mutex.rb:34:in `synchronize'
/var/www/discourse/app/models/optimized_image.rb:19:in `block in lock'
/var/www/discourse/lib/distributed\ _mutex.rb:53:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed\ _mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/var/www/discourse/app/models/optimized\ _image.rb:18:in `lock'
/var/www/discourse/app/models/optimized_image.rb:83:in `create\ _for'
/var/www/discourse/app/models/upload.rb:151:in `get_optimized_image'
/var/www/discourse/app/controllers/user_avatars_controller.rb:219:in `get\ _optimized\ _image'
/var/www/discourse/app/controllers/user\ _avatars_controller.rb:137:in `show_in_site'
/var/www/discourse/app/controllers/user_avatars_controller.rb:90:in `block (2 levels) in show'
/var/www/discourse/lib/hijack.rb:68:in `instance_eval'
/var/www/discourse/lib/hijack.rb:68:in `block (2 levels) in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/i18n-1.14.7/lib/i18n.rb:353:in `with_locale'
/var/www/discourse/lib/hijack.rb:68:in `block in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:911:in `callback_on_resolution'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:797:in `call\ _callback'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:803:in `call_callbacks'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:692:in `resolve\ _with'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1325:in `resolve'
/var/www/discourse/lib/scheduler/defer.rb:125:in `block in do\ _work'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails\ _multisite-6.1.0/lib/rails\ _multisite/connection\ _management/null\ _instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with\ _connection'
/var/www/discourse/lib/scheduler/defer.rb:119:in `do_work'
/var/www/discourse/lib/scheduler/defer.rb:105:in `block (2 levels) in start\ _thread'
Externer S3-kompatibler Speicher verwendet (enable_s3_uploads = true)
s3_cdn_url ist korrekt konfiguriert und wird verwendet
CDN-URL gibt die Datei erfolgreich zurück
Datei ist vorhanden am erwarteten S3-Speicherort
Andere Uploads (Bilder, Anhänge usw.) funktionieren einwandfrei
Der Fehler tritt nur bei Benutzeravataren auf
Frage
Was könnte dazu führen, dass Discourse die Datei für die Avatarverarbeitung nicht abrufen kann, obwohl die exakte Datei existiert und über die korrekte CDN-URL erreichbar ist?
Gibt es etwas Spezifisches bei der Avatarverarbeitung (wie get_optimized_image), das falsch konfiguriert oder falsch gecacht sein könnte?
Ich stoße auf genau dasselbe Symptom bei Discourse + S3 (nur Avatare): Could not find file in the store located at url: //<bucket>.s3.dualstack.<region>.amazonaws.com/original/1X/<hash>.jpeg
Ein paar Details zu meinem Setup, falls es mit deinem übereinstimmt:
enable_s3_uploads = true, Objekte befinden sich unter original/* und optimized/* (kein uploads/default-Präfix)
Zugriff über CloudFront (OAC), der Bucket selbst ist privat
Das Objekt existiert unter diesem Schlüssel; die CDN-URL funktioniert
Der Fehler tritt nur bei der Avatarverarbeitung auf
(Mögliches Problem) Uploads sind mit SSE-KMS verschlüsselt
Wenn du die Ursache oder eine Lösung gefunden hast (Richtlinienänderung, KMS-Berechtigungen, Ausrichtung des Bucket-Pfads usw.), könntest du bitte mitteilen, was funktioniert hat? Danke!