Независимое от хоста приложение Yesod - PullRequest
6 голосов
/ 08 февраля 2012

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

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

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

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

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

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

1 Ответ

3 голосов
/ 08 февраля 2012

Один из подходов заключается в том, чтобы включить фактическое доменное имя в базовый тип и использовать промежуточное программное обеспечение, которое направляется в соответствующее приложение в зависимости от запроса и порождает новые по мере необходимости.Тем не менее, это кажется слишком тяжелым.

Я хочу оставить подход как есть, так как он подходит для общего случая, но, возможно, мы можем добавить дополнительный метод ApprootRequest, которому было бы присвоено значение Request какЧто ж.Я бы хотел перенести это обсуждение в список.

Обновление : изменение уже внесено в Git: https://github.com/yesodweb/yesod/commit/4dd9880389e3b61f976e44525ae97831ec578a17

...