Yesod の設定

web アプリのき開発中はローカルホストで検証し、実際のサービスはリバースプロキシの後ろで運用する方法は、たったこれだけ:

  1. yesod init する
  2. config/settings.yml を適切に変更

yesod init すると、Foundation.hs に以下のようなコードがある。

instance Yesod Sample where
    approot = ApprootMaster $ appRoot . settings

これは、config/settings.yml からよしなにドキュメントルートを決めてくれるという意味。このファイルは、例えば以下のように書く。

Default: &defaults
  host: "127.0.0.1"
  port: 3000
  copyright: Copyright (C) 2011 Kazu Yamamoto

Development:
  <

このように、Development、Testing、Staging、Production というセクションが設定できる。この内のどれかを作成した Yesod アプリの起動時に指定する。

% sample Development

approot は http://$(host):$(port)/ というルールで生成される。approot 自体があれば、そちらが優先される。

よって、上記の Development では、http://127.0.0.1:3000/ がドキュメントルートとなって、*:3000 で動く。127.0.0.1:3000 ではないことに注意。(アドレスを指定できるようにするようお願いしている。)

Production では、http://example.com/app/sample/ がドキュメントルートとなって、ポート *:3000 で動く。approot を指定していても、port は有効であることに注意。

リバースプロキシと web アプリが同一ホストにある場合、他のホストからアクセスできないように、127.0.0.1:3000 で動くべきだが、今はできない。リバースプロキシには、

http://example.com/app/sample/ → http://127.0.0.1:3000/

のような変換情報を設定しておく。(Mighty なら簡単。)