Я отлаживаю проблему с неработающими выпадающими списками BS4 и обнаружил, что при клике файл _ember_jquery.js вызывается по пути /assets/var/www/discourse/public/assets вместо /assets (где он фактически находится). Не понимаю, почему добавляется полный путь к серверу. Насколько мне известно, никаких соответствующих изменений в конфигурации не вносилось, и единственное, над чем я работал, — это добавление простого пользовательского плагина (да, проблема сохраняется даже после удаления плагина). Я относительно новичок в Discourse, поэтому буду очень признателен за любые мысли по этому поводу. Пожалуйста, дайте знать, если потребуется дополнительная информация.
Я считаю, что проблема заключается в способе генерации карты исходного кода, вызванном этим PR: DEV: Bump uglifyjs by romanrizzi · Pull Request #7834 · discourse/discourse · GitHub.
Ранее использовалась опция -p relative, поэтому пути в картах исходного кода выглядели как [‘admin…js.map’]. Начиная с версии 2.4.beta9, опция -p недоступна из-за перехода на uglify 3, поэтому пути в картах исходного кода стали абсолютными, например [‘/var/www/discourse/public/assets/admin…js.map’]. Это приводило к ошибкам 404 при отладке, поскольку фактический файл находился по пути /assets, а карта указывала на /var/www/…/assets.
Я нашел обходное решение: изменить файл lib/tasks/asset.rake, добавив опцию base к параметру карты исходного кода, чтобы это выглядело так:
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
Я не могу гарантировать, что это сработает для всех, но это позволяет мне отлаживать с помощью карт исходного кода без ошибок 404.
Нам нужно было это исправить, @sam?
Да, мы отслеживаем это в другом месте, добавим заметку в TODO, чтобы @Roman был в курсе.
Извините за задержку, проблема теперь исправлена и перенесена в бета- и стабильную версии. Я добавил атрибут base, который содержит путь к ресурсу, оставив атрибут source только с именем файла.