しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

OWIN を使って Ruby を Windows Azure Web サイト上で動かしてみる

微妙に釣りタイトルです。正確には Ruby -> IronRuby ですし、Rails とかが動くわけではありません。*1

これまでに何回か OWIN に関して書いてきましたが、基本的にセルフホストしかしていないので ASP.NET (IIS) 上でホスティングする方法を知らなかったので調べました。

そこで、今回は OWIN を使って IronPython と IronRuby をホスティングしてみる - しばやん雑記 で書いた要領で Windows Azure Web サイト上で OWIN + IronRuby を使ったアプリケーションを動かしてみます。

とりあえず空の ASP.NET アプリケーションを作成して、以下のコマンドを実行して必要な NuGet パッケージをインストールします。

Install-Package Microsoft.Owin.Host.SystemWeb

Install-Package IronRuby

Microsoft.Owin.Host.SystemWeb が OWIN を ASP.NET 上で動作させるためのライブラリです。後は前回のセルフホストと全く同じ Startup クラスと IronRuby のホスティング用クラスを作成するだけです。

Startup クラスを OWIN ランタイムが自動的にアクティベートする仕組みとなっているようですね。

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Use(typeof(RubyHandler));
    }
}

これでコーディングは完了なのですが、最後に Web.config に以下のような設定を追加します。

<appSettings>
  <add key="owin:HandleAllRequests" value="true" />
</appSettings>

キー名から想像つくと思いますが、この値を true にしておかないと OWIN で処理中の HTTP リクエストがハンドラまで渡ってきません。

これで準備が全て完了しました。後は前回と同様に "Hello, World" 的な Index.rb ファイルを設置しておくと、ブラウザから実行結果にアクセスが可能です。

f:id:shiba-yan:20130502001510p:plain

ちゃんと表示できていますね。ちなみに今回は以下のような Ruby コードを用意して実行してみました。

puts "Content-Type: text/html\n\n";
puts "Hello IronRuby!";
puts "<br />";
puts "IronRuby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} patchlevel #{RUBY_PATCHLEVEL}) [#{RUBY_PLATFORM}]";

それでは Windows Azure Web サイトにデプロイしてみます。発行ウィザード使うだけなので実行結果だけ出しておきます。

f:id:shiba-yan:20130502001922p:plain

当然ながら実行結果は同じなんですが、URL を見ると azurewebsites.net ドメインとなっているので Web サイト上で動作してることが分かりますね。

もうちょっと CGI か FastCGI への対応レベルを上げて、ローカルの IronRuby で Rails を動作させることが出来れば、Web サイト上でも IronRuby を使って Rails を動かせるかもしれないですが、それは今後の課題ということにしておきます。

*1:頑張れば動くかもしれない…!