Welcome to MSDN Blogs Sign in | Join | Help
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のインストール

  • 「igem install rack」コマンドでインストールします。
    私の場合は、PATHとGEM_PATH環境変数を設定後に実行しました。実行すると以下のようなメッセージが出力されます。
    C:>igem install rack
    Successfully installed rack-1.0.0
    1 gem installed
    Installing ri documentation for rack-1.0.0...
    Installing RDoc documentation for rack-1.0.0...
    mscorlib:0:in `GetBytes': 値が有効な範囲にありません。
                  (System::Text::EncoderFallbackException)
            from :0:in `write'
            from :0:in `puts'
            from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/
                 user_interaction.rb:227:in`alert_error'
            from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/
                 user_interaction.rb:103:in`alert_error'
            from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/
                 command_manager.rb:77:in `run'
            from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/
                 gem_runner.rb:39:in `run'
            from C:/IronRuby0.5.0/bin/igem:24

    このエラーはIronRubyのバグのようで、riとrdocのインストールに問題があることを示しています。このエラーを発生させないためには、--no-ri --no-rdocオプションでriとrdocをインストールしない方法があります。
    インストールが終了すると、IronRuby 0.5.0のライブラリパスへと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.ブラウザでテストします

  • 「http://localhost/IronRuby.Rack.Example」へアクセスします。
    IronRuby running Rack says "Hello, World"
     at 木 6 11 16:22:32 +09:00 20
  • 上記のように表示されれば成功です。この表示は、IronRuby.Rack.Example\app.rbに記述されたスクリプトを実行して出力しています。config.ru(rackの構成ファイル)などをカスタマイズすれば、別のアプリケーションへURLをマップしたりすることもできます。

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サーバーには対応していません。
Posted: Thursday, June 11, 2009 5:32 PM by shozoa
Filed under: , ,

Comments

Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker