«前の日記(2008-02-08) 最新 次の日記(2008-02-14)» 編集

home-mg.que.ne.jp - diary


2008-02-11 [長年日記]

[Microsoft][Ruby]IIS7.0 + FastCGI on Windows 2008 Server で ruby を動かす

今、簡単なRailsアプリを純MS環境(Windows Server + IIS + SQLServer)で動かそうと悪戦苦闘中です。

CGIのモジュールをインスコする なかなかIIS7.0以前の情報なら色々引っかかったり、2008ServerのBeta3以前の情報となると見つかるんですが、少し手順など調べて回ったものと違っていたり、流石に2008Serverの製品版以降の情報がほとんど見つからなかったので、ちょっと書いてみます。

2008ServerのIIS7.0からデフォルトインストール時にFastCGIがバンドルされるようになりました。VistaではFastCgiModuleというモジュールを追加することで、使うことが出来るようになります。これもPHPをFastCGIで動かしたいという世間の意向からZend社との協業でできたものらしいです。IIS5や6でも使えますが、IISではデフォで使えると。ちなみに、Vistaと2008ServerのIISの違いは基本的に同じものでモジュールの違いと同時接続数などのリソース制限があるだけです。

で、2008 Server でFastCGIを動かすためには、IISのインストール時にCGIモジュールをインストールするのみです。このモジュールをインストールすると、CgiModuleとFastCgiModuleという2つのモジュールがインストールされます。これで、準備は完了


つぎに、FastCgiModuleで動かすもののひもづけをおこないます。IISマネージャを開いて、サイトをつっつくと「機能ビュー」の中にハンドらマッピングというのがあります。ここで画面左側の「モジュールマップの追加」を選ぶ。すると、画像のようなウィンドウが開きますので、画像の例のように入力。これは非常に使いにくいんですが、rubyの本体 *1 にパイプで以下のようにfcgiファイルを渡さないといけない。

C:\ruby\bin\ruby.exe|C:\inetpub\wwwroot\test.fcgi

つまり、fcgiのものが複数あれば複数ハンドラを登録しないと行けません。

逆に単なるCGIとしてのハンドラを登録するには「モジュールマップの追加」ではなく「スクリプトマップの追加」で「実行可能ファイル」を

C:\ruby\bin\ruby.exe "%s" %s

と設定します。(最初の%sにはrbファイル、2番目の%sはscript自体の引数が渡されるものと思われます。)

モジュールマップの追加 これで、IIS上でrubyをFastCGIで動かせるようになります。Railsでは入口は dispatch.fcgi なので、これだけ登録すれば必要十分ですね。

とりあえず、これでIISでFastCGIを使うことができたんですが、isapi_rewrite で悪戦苦闘中です。ちょっと mod_rewrite と違うみたいなんですね。。。ちなみに、IIS7.0用の isapi_rewrite は isapi_rewrite 3 Liteとして、Freewareで提供されています。(多分Rewrite出来るモジュールのなかでこれが唯一の無償版)でも、機能制限なのが泣ける。。。


ちなみに、IIS7.0はちょっと面白い機能がありました。外部からのアクセスに対して例えば404や500などのErrorPageを表示するのは当然なのですが、再現性のあるようなエラーにおいて、'http://localhost/' とサーバ名を指定して、同じURLを叩くと別の画面が出てきます。エラー内容を詳細に出力して、考えられる(一般的な)原因とその対策などを表示してくれます。これはVistaのIISも同様。「手元でのデバッグ作業の足しにしてくれ」という機能のようです。

(追記)設定はこれでいいんだけど、dllのバージョンの関係で安定して動かない。これはdllのバージョンをIISで使うdllのバージョンをあわせればいいのかも。。。確認中

*1 ちなみに、Ruby本体はOne-Click Ruby Installer (http://rubyforge.org/projects/rubyinstaller/)をインストールしてます。ちなみに、RubyForIISは使ってません。使った方がいいのかなぁ…(One-Click Ruby Installerにそのまま入っているfcgi.soとか使ってます。)

[]


«前の日記(2008-02-08) 最新 次の日記(2008-02-14)» 編集
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|