Windows Azure Web サイトで Ruby を動かしてみた(CGI 編) - しばやん雑記 の続きです。
FastCGI への対応を色々と行っている間に、いっそ Ruby on Rails を動かせたりしないかと思ったので、昨夜に半分ぐらい徹夜して動くところまで持っていけました。
実行環境は前回とほぼ変わらず、Web サイトの標準インスタンスに Ruby 2.0.0 と Rails 4 をインストールした環境です。
色々と試行錯誤していたので Kudu を使って irb を叩いたり、mingw32 を使って Native Extension をビルドしたりしましたが、結局のところは Pure Ruby で動かすことが出来ました。
対応方法
そもそも Web サイトというか IIS であっさりと FastCGI で動く環境は PHP だけだとよくわかりました。
Web サイトでは Python 2.7 での WSGI に FastCGI で対応していますが、FastCGI 周りは Microsoft 製で専用に実装されているものみたいです。*1
Configuring Python with Azure Web Sites
そして Ruby に用意されている FastCGI モジュールは Windows での動作を全く考慮されていないので、FastCGI に対応しているから IIS でそのまま動くということはありえないことに気が付くまで時間がかかりました。結局何をしたかと言えば、そのモジュールを IIS に対応させました。
少し追試とコードの整理をしたいので、修正を行ったモジュールは GitHub にでもあげておきます。
パフォーマンス
FastCGI らしく、ちゃんとプロセスが立ち上がったままになっています。
やはり CPU はそこそこ食ってる印象ですが、development 環境で動作させているので、コードのキャッシュなどが無効になっているのも原因だと思われます。production 環境に変更すれば改善が見込めそうです。
しかし、1 回プロセスが立ち上がれば CGI とは比べ物にならないぐらいスムーズに動作しています。IIS のデフォルトだと 300 秒でプロセスが落ちるので、そのあたりを調整すればさらに体感的なパフォーマンス改善は見込めるのではないでしょうか?
まとめ
今回 Ruby と Ruby on Rails を動かしてみたわけですが、仕組みさえわかってしまえば Perl とか FastCGI に対応していて、Windows でも動作する言語なら対応出来そうな気がします。
これが実用的かどうかという話がしたいわけではなく、クラウドサービスでゴニョゴニョしなくても将来的には Rails で開発したサービスの公開に Web サイトが使えると面白いなぁと思いました。
*1:wfastcgi.py がそれに該当