Fehler beim Wiederherstellen von SVG-Dateien aus dem Backup

Beim Versuch, ein Backup wiederherzustellen (bei einem Multisite-Setup, was jedoch, wie unten ersichtlich, keine Rolle zu spielen scheint), tritt Folgendes auf:

Migrating the database...
EXCEPTION: lib/discourse.rb:57:in `exec': Failed to migrate database.
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - /var/www/discourse/public/uploads/default/original/2X/7/7be997f9f48c034ddf5d4eb95d2ea7416f010241.svg
/var/www/discourse/app/models/optimized_image.rb:87:in `block in create_for'
/var/www/discourse/app/models/optimized_image.rb:24:in `block (2 levels) in lock'
/var/www/discourse/lib/distributed_mutex.rb:33:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/app/models/optimized_image.rb:23:in `block in lock'
/var/www/discourse/lib/distributed_mutex.rb:33:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/app/models/optimized_image.rb:22:in `lock'
/var/www/discourse/app/models/optimized_image.rb:59:in `create_for'
/var/www/discourse/lib/site_icon_manager.rb:28:in `block in ensure_optimized!'
/var/www/discourse/lib/site_icon_manager.rb:24:in `each'
/var/www/discourse/lib/site_icon_manager.rb:24:in `ensure_optimized!'
/var/www/discourse/lib/tasks/db.rake:83:in `block in <top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/ruby_executable_hooks:24:in `eval'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => db:migrate

Zunächst dachte ich, es handele sich um ein reines Multisite-Problem, doch der Fehler tritt auch bei einem Nicht-Multisite-Setup auf.

Das Lustige ist: Die Uploads wurden zu diesem Zeitpunkt noch nicht einmal extrahiert (EDIT: zu diesem Zeitpunkt). Dieser spezifische Upload ist jedoch im Archiv enthalten.

tar tvf public/backups/default/redacted-forum-2020-03-02-165725-v20190130013015.tar.gz |grep 7be997f9f48c034ddf5d4eb95d2ea7416f010241
-rw-r--r-- daemon/daemon     3074 2019-05-27 08:21 uploads/default/original/2X/7/7be997f9f48c034ddf5d4eb95d2ea7416f010241.svg

Ursprüngliche Datenbank-Dump-Version v20190130013015

Anschließend habe ich die Uploads manuell extrahiert (in default) und die Wiederherstellung erneut durchgeführt, was erfolgreich war.

Dann habe ich es bemerkt… die Uploads werden NACH db:migrate extrahiert, aber db:migrate führt SiteIconManager.ensure_optimized! aus, was erfordert, dass die Dateien bereits vorhanden sind…

Es gibt also zwei Probleme:

  • SiteIconManager.ensure_optimized! wird ausgeführt, bevor die Bilder extrahiert wurden; (tatsächlich wird es zweimal ausgeführt – einmal nach der Extraktion der Uploads)
  • Es werden die Dateien in default erwartet, da die Remap-Operation noch nicht ausgeführt wurde.

In diesem speziellen Fall schlägt dies hart fehl, da der Code für einen SVG-Upload einen anderen Codepfad nimmt. Bei anderen Uploads scheint der Fehler stillschweigend zu scheitern.

Übrigens: Beim Durchsehen des Codes scheint es, als könnte dies durch die Verwendung von SKIP_POST_DEPLOYMENT_MIGRATIONS=1 umgangen werden, da dies die Bildoptimierung während db:migrate überspringt. Das funktionierte jedoch nicht, als ich es versucht habe.

6 „Gefällt mir“

Wer sollte sich das ansehen, @sam?

1 „Gefällt mir“

Das scheint ziemlich klar zu sein:

Und

Die letzte Person, die mit diesem Ablauf herumgespielt hat, war @gerhard.

@RGJ, wenn du die Diagnose hier beschleunigen möchtest, könntest du vielleicht eine leere Datenbank mit einer einzelnen SVG erstellen, die die Wiederherstellung fehlschlagen lässt. Das würde es uns erheblich erleichtern, dies zu testen.

7 „Gefällt mir“

Ich habe dir eine PM mit einer so schlank wie möglich gehaltenen Sicherungsdatei geschickt, die sich nicht wiederherstellen lässt.

Die Fehlerauslösung erfordert eine „kleine

5 „Gefällt mir“

Vielen Dank für die Meldung des Problems und die Bereitstellung einer Beispieldatei. Es wurde behoben.

6 „Gefällt mir“