Приложение Yesod, не зависящее от имени хоста

Это очень простой вопрос: как мне запустить приложение Yesod, которое может обрабатывать несколько хостов одновременно?

A Настройка Yesod по умолчанию может обрабатывать входящие соединения с любого хоста, но все URL-адреса отображаются с добавлением к ним Approot . Переопределение joinPath в объявлении экземпляра Yesod было бы возможным, если бы существовал способ сохранить текущий домен, чтобы он был доступен для этой функции, но его нет.

Метод, описанный на этой вики-странице , работает, но очень хакерский, поскольку заставляет маршруты принимать дополнительный параметр domain (поскольку у меня нет статического набора параметров домены для сопоставления). Для практических целей (поскольку у меня много маршрутов, некоторые из которых не зависят от домена), было бы лучше иметь решение, которое не затрагивало бы маршруты, поскольку все еще можно получить имя хоста из информации запроса WAI внутри функция-обработчик.

Я использую вещи, для которых требуются абсолютные URL-адреса (например, электронная почта, RSS, XML API), поэтому Approot _ = "" не вариант.

Я не знаю и не могу знать все имена хостов, которые должны поддерживаться во время компиляции.

Итак, как мне визуализировать URL-адреса, чтобы они использовали имя хоста входящего запроса, а не переменную Approot ?

6
задан dflemstr 7 February 2012 в 22:23
поделиться