しばやん雑記

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

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

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

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

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

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

これまでは 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 上でも実用出来そうな気がしています。