Это очень простой вопрос: как мне запустить приложение Yesod, которое может обрабатывать несколько хостов одновременно?
Настройка Yesod по умолчанию может обрабатывать входящие соединения с любого хоста, но все URL отображаютсяс approot
перед ними.Переопределение joinPath
в объявлении экземпляра Yesod было бы возможно, если бы был способ сохранить текущий домен, чтобы он был доступен для этой функции, но его нет.
Метод, описанный в эта вики-страница работает, но очень хакерская, поскольку она заставляет маршруты принимать дополнительный параметр domain
(так как у меня нет статического набора доменов для сопоставления).Для практических целей (поскольку у меня много маршрутов, некоторые из которых не зависят от домена), было бы лучше иметь решение, которое оставило бы маршруты без изменений, поскольку можно по-прежнему получать имя хоста из информации запроса WAI внутрифункция-обработчик.
Я использую вещи, которым требуются абсолютные URL-адреса (например, электронная почта, RSS, XML API), поэтому approot _ = ""
не вариант.
Я не знаю и не могу знатьвсе имена хостов, которые должны поддерживаться, во время компиляции.
Итак, как мне отобразить URL, чтобы они использовали имя хоста входящего запроса, а не переменную approot
?