chikuchikugonzalezの雑記帳

趣味とか日記とかメモとか(∩゚д゚)

WindowsでApache2+Mongrel+Redmineをやってやったわー(ヽ'ω`)

シェリス様つくるのになんとなーくタスク管理とかしたかったので再度Redmineを投入してみました*1
前回はTomcat+JRuby+Redmineな環境でしたが、今回はApache2でやりたかった。

そしてすごく嵌ったのである。ぶっちゃけWindows+Apache環境でRedmineなんて考えないほうがいいと思います。

以下2日間の戦いの記録

最初

最初はApache2+mod_rails(Passenger)+Redmineにしておこうと思っていました。でとりあえず準備としてRuby 1.8.7を投下したわけです。
ついでにRailsとRackとかもいれたんですが、ここが最初の障害。なんでかって、Railsのバージョンが問題でした。

RedmineはRails2.3.5でしか動かなかった。Rails3系だと動きません(´・ω・`)
というよりもRubyにgemでrails入れるとおかしくなるんで入れんなや、ということらしい。
でもRackとRakeは必要

バージョン問題はもっと出ましたけどね

とりあえず最新ってことでgemとかも1.6いれてたら、こんどはrakeでsession_store.rbの生成ができない。ググルとそこにはバージョン依存の影がいっぱい(∩゚д゚)アーアー

gemが1.6だとなんかコケる。ググった先の先人の知恵を借りてgemのバージョンを1.4.2に下げる

一応起動したんですがね

その後WEBrickでの起動は成功しました。で、Apache2に組み込む段階でとりあえずPassengerを使おうとしたらコンパイルできねぇでやんの。
ということでとりあえずmod_rubyを使いました。

mod_rubyは無理 (設定的に)

で、先人の通りにrails-dispatcherとかを設定したらaction_web_serviceとかなんやらかんやらモジュールロードができない系の問題が出たので諦めた*2

じゃぁCGIで

調べたらrailsさん、CGIでの動作諦めてたんですね(´・ω・`)

ここまで昨日。ここから今日

そんならFastCGI

まだ対応してそうなFastCGIを使おうとして、やっぱ無理ってなりました。
FastCGI自体は投入できたんですが、Rubyfcgiモジュールが…。

なにしろtrapっていうシステムコールを使ってんですけどこちとらWindowsなんでそれっぽい関数とか一切無いわけですよ。
あとノンブロッキングIO系の関数もなかった。

まぁそのあたりは回避できるんですが、Unknown listenType 0とかいうエラーが出たときはもうヽ(`Д´#)ノ ムキー!!状態でしたね。
だって、FastCGIのWindowsのOS系関数 (os_win32.c) を読む限り、listenTypeはOS_CreateLocalIpcFdでport番号を基準に設定されてたんですが、どうも呼ばれるルートがなさそうなんですよね。
FCGX_OpenSocketから呼ばれるようなんですがね、InitとかInitRequestとかruby-fcgiモジュールが呼んでいる関数から呼ばれていないんで、結局listenTypeはFD_UNUSEDのまま。そりゃ動かんわ。

Mongrelで妥協

MongrelっていうのはWEBrick互換のサーバプログラムです。えぇサーバです。Apache2と同じ役割のやつですハイ。
こいつをWindowsのサービスに登録できることを知ったので、最終系は

Apache2.2 →<Proxy> MongrelRedmine

というプロキシ接続になりました。

もう疲れたよ(´Д`)ハァ…


いやもうちょい愚痴ありますけどね。相変わらずRubyのヘッダはVC6しか認めてないとか。*3
ぶっちゃけた話、WindowsでRailsやるならTomcat+JRubyの方がいいよたぶん。サーバモジュールとかCGIとか考えなくていいんで。
もしくはPHPとかのを使う

*1:1年くらい前もやった

*2:RubyAddPathを羅列するのにも疲れたし

*3:というよりかはRuby系のモノはWindowsに冷たい