6

これは非常に単純な質問です。同時に複数のホストを処理できる Yesod アプリケーションを実行するにはどうすればよいですか?

デフォルトの Yesod セットアップは、任意のホストからの着信接続を処理できますが、すべての URL はapproot先頭に追加してレンダリングされます。joinPath現在のドメインを保存してその関数で使用できるようにする方法があれば、Yesod インスタンス宣言でオーバーライドすることは可能ですが、ありません。

この wiki ページで説明されている方法は機能しますが、ルートに追加のパラメーターを強制するため、非常にハックですdomain(照合するドメインの静的セットがないため)。実用的な目的のために (私は多くのルートを持っており、そのうちのいくつかはドメインに依存していないため)、ルートをそのままにしておくソリューションを用意することをお勧めします。ハンドラー関数。

私は絶対 URL を必要とするもの (電子メール、RSS、XML API など) を使用してapproot _ = ""いるため、オプションではありません。

コンパイル時に、サポートする必要があるすべてのホスト名を知ることはできません。

approotでは、変数ではなく受信リクエストのホスト名を使用するように URL をレンダリングするにはどうすればよいでしょうか?

4

1 に答える 1

3

1つのアプローチは、実際のドメイン名をファウンデーションタイプに含め、リクエストに応じて適切なアプリケーションにファームアウトするミドルウェアを使用し、必要に応じて新しいドメインを生成することです。しかし、これは重すぎると感じます。

一般的なケースに適合するため、approotをそのままにしておきたいのですが、値が与えられるapprootRequestメソッドを追加することもできRequestます。この議論をリストに移したいと思います。

更新:変更はすでにGitに上陸しています:https ://github.com/yesodweb/yesod/commit/4dd9880389e3b61f976e44525ae97831ec578a17

于 2012-02-08T13:49:55.413 に答える