Ich betreibe eine Discourse-Seite und möchte zunächst sagen, wie sehr ich diese Software liebe. Vielen Dank an das gesamte Team für die großartige Arbeit – dies ist ein fantastisches Werkzeug.
Nach einem Upgrade auf Version 2.5.0 geriet ich in große Schwierigkeiten. Hier ist eine Zusammenfassung und die Workaround-Lösung, die ich angewendet habe. Vielleicht führt dies in zukünftigen Versionen zu einer noch besseren Lösung.
Einige der Themen in unserer Datenbank enthalten defekte Uploads. Wir haben die Funktion „S3-Uploads
Wir haben das entgegengesetzte Verhalten: Eingeloggte Benutzer funktionieren einwandfrei, nicht eingeloggte Benutzer können keine Verbindung herstellen und erhalten einen Fehler 500.
Sicher, in meiner Datei log/production.log tauchte folgende Ausnahme auf (als Discourse auf den leeren S3-Bucket zugriff, den ich neu erstellt hatte, in der Hoffnung, dass dies das Problem beheben würde).
Started GET “/” for 86.246.127.170 at 2020-05-16 14:29:06 +0000
Processing by ListController#latest as HTML
Creating scope :open. Overwriting existing method Poll.open.
Completed 500 Internal Server Error in 3638ms (ActiveRecord: 0.0ms | Allocations: 135090)
NoMethodError (undefined method path' for nil:NilClass) /var/www/discourse/lib/file_store/base_store.rb:150:in cache_file’
Danke, das könnte es sein. Tatsächlich habe ich zwei Plugins installiert: Discourse Adsense und discourse-chat-integration. Ich werde versuchen, das System ohne diese neu zu erstellen.
Ich kann bestätigen, dass dies nicht durch ein Plugin verursacht wird: Ich habe denselben Fehler mit einer frischen Installation plus Wiederherstellung meines letzten Backups und ohne installierte Plugins (außer docker_manager) reproduziert.
Der erste Stacktrace, den ich erhalte, lautet:
Completed 500 Internal Server Error in 4169ms (ActiveRecord: 0.0ms | Allocations: 72058)
NoMethodError (undefined method path' for nil:NilClass) /var/www/discourse/lib/file_store/base_store.rb:150:in cache_file’
if file.nil?
return
end
FileUtils.cp(file.path, path)
Dies führte zu einem zweiten Fehler (dem, den ich in meinem ursprünglichen Beitrag erwähnt habe):
Started GET “/” for 86.246.127.170 at 2020-05-18 07:37:40 +0000
Processing by CategoriesController#index as HTML
Completed 500 Internal Server Error in 4342ms (ActiveRecord: 0.0ms | Allocations: 60478)
NoMethodError (undefined method path' for nil:NilClass) /var/www/discourse/app/models/upload.rb:193:in fix_dimensions!’
Dies habe ich behoben, indem ich local? auf true gesetzt habe:
def local?
return true
!(url =~ /^(https?:)?///)
end
Ja, das habe ich. Aber dann wurde der Bucket gelöscht. Ich bin also wieder auf den lokalen Speicher zurückgewechselt (mit natürlich toten Bildlinks in früheren Themen).
Ja, das sieht nach demselben Problem aus. @sukria, wenn du auf die neueste Version mit durchgeführten Tests aktualisierst, habe ich eine Korrektur hinzugefügt, die die Handhabung fehlerhafter Uploads robuster macht (obwohl du dennoch versuchen solltest, die Referenzen zu fehlerhaften Uploads zu bereinigen).
Danke @david, ich bestätige, dass ein frischer Neuaufbau gegen tests-passed sofort funktioniert hat. Danke!
Gibt es einen geeigneten/einfachen Weg, diese toten Links in den Themen zu entfernen?