しばやん雑記

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

Azure Web Apps 上で JRuby を使って Redmine 3.0.3 を動かす

昨日の記事で Azure Web Apps でも JRuby をインストールして Rails 4 を動かすとこまで出来たので、今日は Redmine 3.0.3 をインストールしてみました。

以前に Redmine 2.5 をインストールしたことはありましたが、デプロイスクリプトの実行に失敗したり不安定な面がありました。原因は DevKit 周りだったので、JRuby を使うことで解消できるという目論見です。

インストールの流れは Redmine 2.5 の時と変わりませんが、以下の記事を参考にしながら行いました。

DB として前回は ClearDB を使いましたが、今回は記事の通り SQLite を使うことにします。

ファイルをダウンロード

Redmine 公式サイトから 3.0.3 をダウンロードして、適当に展開しておきます。

Download - Redmine

今回もカスタムデプロイスクリプトを使って JRuby のインストールと、bundle install の実行を行うので必要なファイルをリポジトリからコピーしておきます。

見たところ Gemfile.lock が Redmine のファイルに含まれていなかったので、deploy.cmd の該当部分を修正して Gemfile.lock を使わないようにします。

:: 2. Exec Bundler
IF EXIST "%DEPLOYMENT_TARGET%\Gemfile" (
  echo Executing bundle install

  PUSHD "%DEPLOYMENT_TARGET%"
  
  %JRUBY_EXE% -S "%JRUBY_BUNDLER_CMD%" install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4
  IF !ERRORLEVEL! NEQ 0 goto error
  
  POPD
)

これで Azure Web Apps に必要な設定は終わったので、Redmine 自体の設定を行います。

Redmine の設定を変更する

サーバーとして今回も puma を使うので、Gemfile に追記しておく必要があります。

gem "puma"

当然ながら忘れると、最後の最後で動かなくなるので注意です。

config\database.yml ファイルも必要なので、サンプルをリネームして SQLite を使うように書き換えます。

production:
  adapter: jdbcsqlite3
  database: db/redmine.db
  encoding: utf8

これで準備が出来たので、Git リポジトリを作成して Azure Web Apps へデプロイする準備を行いますが、database.yml は .gitignore に書かれているので、そのままだとコミットされない点だけ注意したいです。

Web Apps へデプロイ

このままデプロイすることで JRuby と必要な gem がインストールされますが、更に少しコマンドを叩く必要があるので Kudu の Debug Console から作業を行います。

と言っても、ドキュメント通りに rake を実行するだけです。

set PATH=D:\home\site\wwwroot\bin\jruby-1.7.20\bin\;%PATH%
set RAILS_ENV=production

jruby -S bundle exec rake generate_secret_token
jruby -S bundle exec rake db:migrate
jruby -S bundle exec rake redmine:load_default_data

全て実行に成功すると、ブラウザからのアクセスで Redmine が立ち上がるようになります。

初回起動には時間がかかりますが、一度起動してしまえばサクサク動くようになります。以前に 2.5 を動かした時よりも快適かもしれません。

メモリを結構必要とするので、B1 以上のインスタンスで Always On を有効にして使うのが現実的かなと思いました。少し弄ったぐらいですが、実用出来るレベルだと感じました。

大きなはまりどころもなく、デプロイスクリプトを使って理想的な形でデプロイ可能なので、Azure Web Apps で Ruby を動かす場合は JRuby が一番良いかなと思いました。

標準でインストールされるとパフォーマンスが改善されると思うので、少しぐらい期待してみたいです。