Разработка мобильной версии Discourse

У меня установлена локальная версия Discourse для разработки на машине с Ubuntu. Следуя руководству по локальной установке, я успешно запустил основную версию для разработки. Также я настроил ember-cli, который работает и проксирует запросы к Rails-приложению. Я могу полноценно взаимодействовать с десктопной версией приложения.

Однако при просмотре мобильной версии через DevTools в Chrome всё не работает. Я вижу только пустую страницу с ответом «200 OK», но никакого контента — страница полностью пуста.

Судя по логам Rails, что-то рендерится, но, похоже, это не проходит через прокси Ember.

Started GET "/" for <redacted> at 2022-01-31 22:51:03 +0000
   Rendering layout layouts/application.html.erb
   Rendering categories/index.html.erb within layouts/application
   Rendered categories/index.html.erb within layouts/application (Duration: 2.8ms | Allocations: 925)
   Rendered layouts/_head.html.erb (Duration: 1.6ms | Allocations: 273)
   Rendered common/_discourse_stylesheet.html.erb (Duration: 3.2ms | Allocations: 609)
   Rendered layouts/_head_tag.html.erb (Duration: 0.2ms | Allocations: 65)
   Rendered application/_header.html.erb (Duration: 2.5ms | Allocations: 824)
   Rendered layouts/_body_tag.html.erb (Duration: 0.1ms | Allocations: 21)
   Rendered layout layouts/application.html.erb (Duration: 22.6ms | Allocations: 4961)

ember-cli не пишет ничего о запросе.

Вероятно, я где-то неправильно настроил конфигурацию, и где-то возникает ошибка, но я не могу понять, где именно и как вывести сообщение об ошибке. Есть ли какие-то дополнительные флаги или переменные окружения, которые можно установить для более подробного логирования этой проблемы? Я пробовал установить DEBUG=ember-cli:*, как рекомендовано здесь, но это не дало никакой информации о запросе.

Любая помощь по этой проблеме будет очень ценной! Я давно пользуюсь Discourse, спасибо за его разработку!

Есть ли ошибки JavaScript в консоли браузера?

К сожалению, нет. В консоли отображается только следующее (красным цветом):

GET http://localhost:4200/ 200 (OK)

Ответ, странно, полностью пуст.

Есть идеи, как включить более подробное логирование для Ember CLI или самого Discourse? Если бы я мог просто увидеть, в чём ошибка, я, вероятно, смог бы решить проблему. Но по какой-то причине я не вижу никаких ошибок вообще. Есть какие-то идеи?

После изучения исходного кода я обнаружил две переменные окружения, которые помогли:

  • PRINT_EXCEPTIONS — показывает все исключения; возможно, это слишком много шума, чтобы быть полезным, но мне это помогло
  • RAILS_LOGS_STDOUT — выводит всё в консоль, что именно я и искал выше

Это помогло подтвердить, что ошибка не возникала ни внутри Rails, ни в SCSS моего tema.

Оказалось, что между Ember и Rails застрял какой-то компонент сжатия gzip. Не знаю, как он там оказался, но когда заголовок Content-Encoding присутствовал, эта конкретная строка копировала его, из-за чего браузер (и curl) просто игнорировали всё тело ответа (вероятно, потому что оно больше не было закодировано в gzip).

Похоже, это уже исправлено в версии 2.9.0.beta1, но я использую версию 2.7.13.

Удаление компонента gzip в режиме разработки решило проблему для моей конкретной версии, но в будущем всё должно работать корректно с gzip. Не понимаю, почему версия для рабочего стола не столкнулась с той же проблемой.

Надеюсь, это поможет кому-то ещё, кто сталкивается с подобными проблемами.