しばやん雑記

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

JRuby 9.0.0.0 がリリースされたので Azure Web Apps にインストールして Ruby on Rails を動かしてみた

ちょっと前に JRuby 9.0.0.0 がリリースされていました。Ruby 2.2 との互換性があるようです。

http://jruby.org/2015/07/22/jruby-9-0-0-0.html

JRuby を使うと Azure Web Apps でも Ruby on Rails アプリを CRuby な環境よりも安定して動かすことができるので、これまでにも何回か扱ってきました。

そして偶然にも Web Apps もポータル周りがアップデートされて Java 8 を簡単に使うことができるようになったので、前のように JRuby 9.0.0.0 と Java 8 の組み合わせを Web Apps で動かしてみます。

最近のアップデートでポータルから Java のバージョンと Web コンテナの種類も設定可能になりました。

http://azure.microsoft.com/blog/2015/07/30/july-update-for-web-apps-and-app-service-environments-in-the-azure-preview-portal/

これまでは JAVA_HOME を自分でオーバーライドする必要がありましたが、これからはポータルから必要な Java バージョンに切り替えるだけです。

Web コンテナを必ず指定しないといけないのはいまいちなので、使わない設定が欲しいですね。

Web Apps で動かすためのサンプルを以前に GitHub で公開しましたので、今回はそれを修正して JRuby 9.0.0.0 への対応を行いました。Java 8 はポータルからの設定だけで問題ありません。

主な修正点としては JRuby のバージョン指定とパスを修正したぐらいです。

以前は bundle exec を使って実行していたのですが、JRuby の Wiki を見ていると bundle exec と同じことを行ってくれる -G オプションを知ったので、こちらを使うように Procfile を修正しました。

bundle exec
Bundler's "exec" command causes a second JRuby instance to be launched for the sole purpose of booting only your Gemfile gems. You can avoid the second process by passing -G to JRuby, which will do the Bundler pre-booting before starting JRuby and loading RubyGems.

Improving startup time · jruby/jruby Wiki · GitHub

PATH の問題なのか puma を相対パスで指定する必要があったので、その対応だけ行いました。

jruby.exe -G vendor/bundle/bin/puma --env development -p %PORT%

これまでは bundle exec の実行のために JRuby を起動した後、さらに JRuby が起動される形だったため起動パフォーマンスとメモリ消費が激しかったのですが、これで多少改善できました。

やはり初回起動には時間がかかりますが、実際にブラウザでアクセスすると Rails のいつものページが表示されます。ちゃんと JRuby 上で Ruby on Rails が動作することも確認できました。

相変わらずの話になりますが、JRuby をインストールするプロセスに地味に時間がかかるので、プリインストールされるようになればいいなと思います。

実行後に Process Explorer を見てみると、JRuby が 1 つだけ動いていることが確認できます。

JRuby が 1 つだけ起動するようになったので、起動時間も 20 秒ほど短縮できたと思います。

かなり JRuby 9.0.0.0 で互換性が改善されたらしく、Web Apps 上でも実用出来そうな気がしています。