(Я пометил это как unsupported-install, но буду признателен за мнение экспертов, несмотря на это
)
Ребята, я пытаюсь запустить базовый образ Discourse в относительно простом наборе из нескольких Docker-контейнеров с помощью Docker Compose.
Вот основы:
- Форум находится в подпапке, назовём её
/board, то есть (https://blah.com/board) - nginx перенаправляет запросы к
/board:443наlocalhost:4000. - Discourse Rails работал на порту 4000 (потому что порт 3000 занят чем-то другим)
- В переменных окружения Rails есть критически важная настройка, обеспечивающая эту работу:
DISCOURSE_RELATIVE_URL_ROOT: “/board”
Теперь я обновил версию Discourse (до Ember-CLI), и всё перестало работать.
Итак, естественно, я добавил контейнер для Ember-CLI, который запускает:
discourse-ember:
command: bin/ember-cli --port 4000 --proxy "http://localhost:4200"
Теперь Ember обрабатывает входящие запросы на порту 4000 в первую очередь.
Я перенёс контейнер Discourse Rails на порт 4200 и запустил всё.
Сначала хорошие новости:
- Запрос к dev-сайту через curl работает!
Теперь плохие новости:
-
Не работает в браузере, почему?:
Потому что, apparently, он пытается обратиться к Discourse, запрашивая:
/bootstrap.json
и выдаёт ошибку:
Discourse Ember CLI Proxy Error
Error: Could not get http://0.0.0.0:4200/bootstrap.json
FetchError: invalid json response body at http://0.0.0.0:4200/bootstrap.json?for_url=%2Fboard reason: Unexpected token N in JSON at position 0
вместо
/board/bootstrap.json (который возвращает данные).
Если же я использую эту конфигурацию:
discourse-ember:
command: bin/ember-cli --port 4000 --proxy "http://0.0.0.0:4200/forum"
то получаю ошибку Rails:
Routing Error
No route matches [GET] "/forum"
При этом всего несколькими строками ниже мне предлагают:
bootstrap_path GET /bootstrap(.:format)
bootstrap#index {:format=>/(json|html|\*\/\*)/}
Это именно тот путь, к которому я пытался обратиться?
Как заставить Ember достаточно умно проксировать запросы в подпапку, когда он пытается получить информацию bootstrap, то есть:
http://0.0.0.0:4200/forum/bootstrap.json
Напоминаю, в данном случае Ember работает в своём собственном контейнере.