Windows Azure Web サイトが Java に対応したので Ruby on Rails を動かしてみた - しばやん雑記 で試してみた Ruby 1.9.3 / Thin 1.6.2 という環境がどのくらいパフォーマンスが出るのかと気になったので、割と有名どころな Redmine をインストールして確認してみました。
とりあえずインストールの手順を書いていきますが、Ruby 1.9.3 や Thin のインストールは前回と同じなので省略します。
というか、Redmine のインストール手順に関しては、日本語版のドキュメントが非常にわかりやすく、今回もこの手順通りに Kudu を使って行っただけだったりします。
Redmineのインストール — Redmine Guide 日本語訳
なのでインストール時の注意点だけを書いていきます。ダウンロードしたバージョンは最新の 2.5 です。
まずは当然ながらサーバとして Thin を使うので Redmine のルートに Gemfile.local を作成して以下のように追記しておきます。
# Gemfile.local gem "thin"
thin はネイティブなコードを含んでるっぽいので、devkit を正しく設定していないと失敗します。
あと Bundler を使ったインストール時に失敗するかもしれないので、その場合は gem を使ってインストールします。
gem install thin
そして Redmine のドキュメントを見ると mysql2 をインストールしなさいと書いてあるんですが、普通に gem install してもエラーになってしまいます。
正直よくわからなかったので先人の知恵に頼ったところ、以下の記事が参考になりました。
gem install mysql2 がうまくいかない - Railsプロになろう!
どうやらビルドするために MySQL のインストールディレクトリに含まれている include と lib ディレクトリが必要みたいです。しかし、Web サイトにインストールされている MySQL には include ディレクトリが存在しなかったので、ローカルからディレクトリを Web サイトへ持っていきました。
gem install mysql2 -- '--with-mysql-lib="D:\home\mysql\lib" --with-mysql-include="D:\home\mysql\include"'
注意点としては MySQL は 32bit 版を使わないとビルドに失敗することと、実行前に ruby.exe と同じ場所に libmysql.dll を置いておかないとエラーになることぐらいでしょうか。
これで mysql2 のビルドも通るので、ClearDB の設定を行えば、Redmine 側の準備は完了です。
これからは Web サイト側の設定になるのですが、前回は Java を有効にして httpPlatform 構成を追加しましたが、Java を有効にすることなく汎用的に使える Web.config を作成したので、今回はこっちを使ってみます。
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <add name="httpPlatformHandlerMain" modules="httpPlatformHandler" path="*" verb="*" resourceType="Unspecified" /> </handlers> <httpPlatform processPath="%RUBY_HOME%\bin\ruby.exe" arguments="%RUBY_HOME%\bin\thin -e production -p %HTTP_PLATFORM_PORT% -c '%RAILS_ROOT%' start" startupTimeLimit="60" startupRetryCount="5" /> </system.webServer> </configuration>
あとはこの Web.config を wwwroot 直下において、管理ポータルのアプリケーション設定から RUBY_HOME と RAILS_ROOT を追加するだけです。
今回は Redmine のコードを wwwroot に置いてあるので、このような設定にしてあります。
そして普通に Web サイトにアクセスすると Redmine が起動してくれるはずです。
以前に FastCGI を使って Radiant CMS を動作させた時よりもサクサク動いている気がします。改造した fcgi を使わずに済むという点でもいい感じです。