Im vorliegenden Fall wurden die fehlenden Avatar-Bilder nach einem Upgrade über die Kommandozeile und einem manuellen Upgrade von PostgreSQL von Version 10 auf 12 in den Tombstone-Ordner in S3 verschoben. Der genaue Grund ist mir noch nicht klar.
Auffinden der Uploads
@Jeremie_Leroy @Pad_Pors Wenn Sie prüfen möchten, ob dies auch in Ihrem Fall zutrifft, habe ich das Fehlen der Avatare in meinem S3-Tombstone-Ordner wie folgt überprüft:
-
Ich habe die SHA1 (die 16 Zeichen lange Zeichenfolge in der Upload-URL) eines Avatar-Uploads ermittelt, von dem ich wusste, dass er nach der Migration defekt war. Dazu habe ich die Upload-ID aus der URL des defekten Avatar-Uploads entnommen (es ist der erste Teil des Dateinamens; bei 6254_2.png ist die ID also 6254) und diese ID verwendet, um die SHA1 des Uploads in einem aktuellen Datenbank-Dump nachzuschlagen. Wenn Sie mit der Kommandozeile nicht vertraut sind, können Sie Ihre Daten in einem Dump mithilfe einer PostgreSQL-GUI wie Postico 2 visualisieren.
-
Ich habe im Tombstone-Ordner des betreffenden S3-Buckets mit der AWS CLI nach der SHA1 gesucht.
aws s3api list-objects --bucket <bucket_name> --query "Contents[?contains(Key, <sha1>)]" --prefix "tombstone"
(Sie müssen <bucket_name> und <sha1> entsprechend anpassen)
Wenn es funktioniert, erhalten Sie eine Ergebnisliste, die so aussieht:
{
"Key": "tombstone/original/2X/d/d7b553ff276fca054c7090e859ef5339fd1f936e.jpg",
"LastModified": "2020-05-16T11:45:03+00:00",
"ETag": ## Zeichenfolge aus Buchstaben und Zahlen,
"Size": 64580,
"StorageClass": "STANDARD",
"Owner": {
"ID": ## Zeichenfolge aus Buchstaben und Zahlen
}
}
Hinweis: Der 16. Mai war der Zeitpunkt, an dem ich das Upgrade durchgeführt habe. Alle fälschlicherweise als Tombstone markierten Avatare haben Zeitstempel aus dieser Zeit. Ich vermute, dass das Problem aufgrund von Caching erst mit einiger Verzögerung und nur intermittierend in der Produktion aufgetreten ist.
Wiederherstellung
Soweit ich weiß, ist UploadRecovery (und die damit verbundene Rake-Aufgabe) spezifisch für das Hochladen von Beiträgen und behandelt keine als Tombstone markierten Avatare.
Ich arbeite derzeit daran, eine neue Methode zu UploadRecovery hinzuzufügen (zu patchen), die recover_from_s3 verwendet, um die Avatar-Uploads wiederherzustellen.
Falls jemand eine einfachere Möglichkeit kennt, fälschlicherweise als Tombstone markierte Avatare in S3 wiederherzustellen, bin ich für jeden Hinweis dankbar.
@tgxworld Haben Sie Ideen?