Rack ベースの Web アプリを IIS で動かしてみました
前回にご紹介した Railsカンファレンスの IronRuby on Railsセッションで、Rails以外のWebフレームワークとしてrackが紹介されていました。rackは、Ruby向けの Webインターフェースを提供するフレームワークで、Ruby on Rails 2.3.x系も内部でrackと統合されています。このrackをIronRubyを使って、IISで動かしてみました。その動かし方を以下に記載します。
1.必要なもの
2.rackのインストール
3.HTTPハンドラをビルドします
- githubからダウンロードしたIronRuby.Rackをビルドします。
- 私の場合は、以下のような手順で作業を行いました。
git clone git://github.com/jschementi/ironruby.git
コピーしたソースコードの中から、C:\Users\shozoa\wk\ironruby\Merlin\Main\Hosts\IronRuby.Rackフォルダを作業用フォルダへコピー。
IronRuby.Rack.slnファイルをVisual Studioで開いて、IronRuby.RackプロジェクトとIronRuby.Rack.Exampleプロジェクト以外のプロジェクトを削除(環境によって、IronRuby.Rack.Exampleプロジェクトは無効になっているかも知れません)
IronRuby 0.5.0の7つのアセンブリに対して参照をIronRuby.Rackプロジェクトへ追加しました。
これでIronRuby.Rackプロジェクトをビルドできるようになりました。
4.IISの環境を作成します
- 管理ツールのIISマネージャを開きます。
- Default Web Sitesの下へ新規のアプリケーションを作成します。
エイリアスを「IronRuby.Rack.Example」にします。
物理パスにコピーしたソースコードの「IronRuby.Rack\IronRuby.Rack.Example」を指定します。
- IronRuby.Rack.Example\web.config の configセクションを編集します。
<section name='microsoft.scripting'
type='Microsoft.Scripting.Hosting.Configuration.Section,
Microsoft.Scripting, Version=0.9.6.10, Culture=neutral,
PublicKeyToken=31bf3856ad364e35'
requirePermission='false' />
この変更は、アセンブリのバージョン番号とパブリックキートークンが異なるために行っています。
- Visual Studio で IISのWebプロジェクトを編集するには、IISにいくつかのオプションが必要になります。このオプションとは、Windowsの機能のことです。追加されるには、アプリケーションの追加で以下の機能を追加します。
セキュリティ-要求フィルタリング、Windows認証
管理ツール-IIS6と互換性のある管理-IISメタベースとIIS6構成との互換性
管理ツール-IIS管理コンソール、IIS管理サービス、IIS管理スクリプトとツール
(注)Visual Studio 2008で編集しないのであれば、この作業は必要はありません。私は、IIS7で動作確認を行っています。
- IronRuby.Rack.Example\Binフォルダへ必要なアセンブリを配置します。
IronRuby.Rackプロジェクトでビルドして出来たアセンブリ(私の場合Debug\Binフォルダにある8つ)をコピーしました。
- RubyとIronRubyのライブラリに対して、IISを起動するアカウント(Network Service)に対してアクセス権限を付与します。
「C:Ruby」と「C:\IronRuby-0.5.0」へ読み取り権限を私は付与しました。
5.ブラウザでテストします
6.IronRuby.Rackの制限事項
- GEM_PATH環境変数が「C:\ruby\lib\ruby\gems\1.8」固定になっている(Application.cs)ため、ruby 1.8系のインストールフォルダが「c:\ruby」で無ければならないということです。
- rackの構成ファイルが、Webアプリケーションのルート直下に無ければならない
- 制限ではないですが、HTTPハンドラは内部でRackupを行っています。
(注)この個所を応用すれば、別のフレームワークもサポートできるかも知れません。
- Visual Studioの開発用Webサーバーには対応していません。