Ich habe ein Problem mit nicht funktionierenden BS4-Dropdowns debuggen und festgestellt, dass bei einem Klick auf _ember_jquery.js unter /assets/var/www/discourse/public/assets aufgerufen wird, anstatt unter /assets (wo die Datei tatsächlich liegt). Ich bin mir nicht sicher, warum der vollständige Serverpfad angehängt wird. Soweit ich weiß, wurden keine relevanten Konfigurationsänderungen vorgenommen, und das Einzige, woran ich gearbeitet habe, ist das Hinzufügen eines einfachen, benutzerdefinierten Plugins (ja, das Problem besteht auch dann weiter, wenn das Plugin entfernt wird). Ich bin mit Discourse noch relativ neu, daher wären jegliche Gedanken zu diesem Thema sehr willkommen. Bitte teilen Sie mir mit, falls Sie weitere Informationen benötigen.
Ich glaube, das Problem liegt in der Art und Weise, wie die Source Map generiert wird, verursacht durch diesen PR: DEV: Bump uglifyjs by romanrizzi · Pull Request #7834 · discourse/discourse · GitHub.
Früher wurde die Option -p mit relativen Pfaden verwendet, sodass die Source-Map-Pfade wie ['admin.....js.map'] aussahen. Ab Version 2.4.beta9 ist die Option -p aufgrund des Wechsels zu Uglify 3 nicht mehr verfügbar, sodass die Source-Map-Pfade absolut waren, z. B. ['/var/www/discourse/public/assets/admin...js.map']. Dies führte dazu, dass die Source Maps beim Debuggen einen 404-Fehler auslösten, da die tatsächliche Datei unter /assets lag, die Map jedoch angab, sie befinde sich unter /var/www/.../assets.
Eine von mir gefundene Workaround-Lösung bestand darin, in lib/tasks/asset.rake die Option base zum Parameter der Source Map hinzuzufügen, sodass es nun so aussieht:
base = assets_path + ((d = File.dirname(from)) == "." ? "" : "/#{d}")
cmd = <<~EOS
uglifyjs '#{assets_path}/#{from}' -m -c -o '#{to_path}' --source-map "base='#{base}',root='#{source_map_root}',url='#{source_map_url}'" --output '#{to_path}'
EOS
Ich kann nicht garantieren, dass dies für alle funktioniert, aber es ermöglicht mir das Debuggen über Source Maps ohne 404-Fehler.
Mussten wir das @sam beheben?
Ja, wir verfolgen das an anderer Stelle. Ich werde eine Notiz auf der TODO-Liste hinzufügen, damit @Roman Bescheid weiß.
Entschuldigung für die Verzögerung. Das Problem ist nun behoben und sowohl in die Beta- als auch in die stabile Version zurückportiert worden. Ich habe das Attribut base hinzugefügt, das den Pfad zum Asset enthält, während das Attribut source nur den Dateinamen beinhaltet.