yesodでpostgresqlを使う@Windows7 64bit環境

ふと思い立ってyesodを動かしてみようと思ったのだけど、せっかくならsqliteじゃなくてPostgreSQLを使用したい。それなりに詰まったのでメモを残してみようかと。

環境とか使用したソフトのバージョンは以下のような感じ。

  • Windows7 Ultimate SP1 64bit
  • Haskell Platform 2011.4.0.0
  • PostgreSQL 9.1.3 32bit
    • Haskellが32bitなので64bitは使わない方が無難。ちゃんと確認はしていないですが、クライアント向けのライブラリさえ32bit用意してしまえばDBサーバ側は64bitでもいけそうな気はする。
    • http://www.postgresql.jp/PostgreSQL/9_1/9_1_3 からダウンロード
  • Pcre for Windows 7.0
  • yesod-platform 1.0.3.4
    • たまたまなのか、最初1.0.2や1.0.3.2でインストールできなかった。そういうときは低いバージョンに切り替えたほうがよさそう。1.0.1ならインストールできたけど、そうこうしてるうちに1.0.3.3になってインストールできるようになった。その後すぐに1.0.3.4になったので最終的にこれに。

あと、cygwin環境から実行してインストールできたけど、下手にcygwinの/usr/libとかにライブラリやらヘッダやらのパスを通していると引っかかるっぽいのでご注意。何台か試したうちの一台(WindowsXPだけど)はこれが原因でしばらくはまった。

  1. 上記のyesod-platform以外を全部インストール
  2. $ cabal update
  3. $ cabal install yesod-platform
  4. $ yesod init
    • いろいろ聞かれるので適当に入力。
    • DBの種類を聞かれたらp(postgresql)を選択する。
  5. $ cd <できたフォルダ>
  6. $ cabal install
    • pcreやpostgresqlにライブラリやヘッダのパスが通っていない場合は、エラーが出て--extra-include-dirだとか--extra-lib-dirだとか(ちゃんと覚えてないけど)を設定しろと言われるので設定してやる。
    • それでもpcreのdllだかのリンクができないとエラーが出たので、pcreのbinの中のpcre3.dllをpcre.dllって名前に変えて C:\Windows\SysWOW64 とかに放りこんでやるとリンクできるっぽい。
    • 追記:deployしようとしたときなどにはpcre3.dllを要求したりもするので、pcre.dllとpcre3.dllという2つのファイルに増やしてSysWOW64においておくのがよさそう。ちょっと気持ち悪いけど
  7. postgresql側にアカウントとかデータベースとかを作成する。
  8. <できたフォルダ>/config/postgresql.yml を編集してDB名やアカウントやパスワードを設定する。
  9. $ yesod devel
    • これでしばらく待ってエラーが出なければ、ブラウザで http://localhost:3000/ を見てそれっぽいページが表示されればOK

もしHaskell-Platformが64bitになってもいろいろ64bitにならないと動かせなさそうなので、使えるようになる日は遠そう。まあ、自分でビルドすればなんとかなるかもだけど。