微妙に釣りタイトルです。正確には 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 ファイルを設置しておくと、ブラウザから実行結果にアクセスが可能です。
ちゃんと表示できていますね。ちなみに今回は以下のような 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 サイトにデプロイしてみます。発行ウィザード使うだけなので実行結果だけ出しておきます。
当然ながら実行結果は同じなんですが、URL を見ると azurewebsites.net ドメインとなっているので Web サイト上で動作してることが分かりますね。
もうちょっと CGI か FastCGI への対応レベルを上げて、ローカルの IronRuby で Rails を動作させることが出来れば、Web サイト上でも IronRuby を使って Rails を動かせるかもしれないですが、それは今後の課題ということにしておきます。
*1:頑張れば動くかもしれない…!