MacOSXローカル環境でRedmineを使う

今までは自宅サーバRedmineを入れていたのですが、省エネのためサーバを止めてMacにRedmineを入れて使うことにしました。その設定記録です。

Railsの実行環境にはpassengerスタンドアローン版を使います。passengerのデーモン化にはlaunchdを使います。Apache版passengerならlaunchdの設定は要りませんが、MacOSX付属のApacheに触りたくないので避けました。

rvmでRubyのインストール

自分はRubyをよく使うので、OS付属のRubyを使わずrvmを使っています。普段Rubyを使わない人はプリインストールのRubyで十分でしょう。

$ rvm install 1.8.7

gemライブラリのインストール

rvmでRedmine専用のgemsetを作成します。

$ rvm use 1.8.7
$ rvm gemset create redmine

$ rvm use 1.8.7@redmine
$ gem install rack -v=1.1.2 --no-ri --no-rdoc
$ gem install i18n -v=0.4.2 --no-ri --no-rdoc
$ gem install mysql --no-ri --no-rdoc
$ gem install passenger --no-ri --no-rdoc

Redmineの起動にはDBライブラリ, rack, i18nが必要です。

Redmineのインストール

Redmine を ~/Documents/redmine に設置します。設定方法はググればいくらでも出てくるので省略します。データベースの設定をしてproductionで起動できれば準備OK

$ rvm use 1.8.7@redmine
$ cd ~/Documents/redmine
$ script/server -e production

mysqlでエラーになる場合は、このブログの以前の記事を参考にしてください。

passengerで起動テスト

$ rvm use 1.8.7@redmine
$ cd ~/Documents/redmine
$ passenger start -e production

初めてpassengerコマンドを使う時だけ、nginxをダウンロードしてビルドするので時間がかかります。

launchdで自動起動を設定

MacOSXではlaunchdを使います。launchdはデーモン起動の他、cronのように一定時間ごとにプログラムを起動したり、ファイルパスを監視して変更があったらプログラムを起動することができる統合ジョブ管理ツールです。通常OSXではcronやinitは使われません。

~/Library/LaunchAgents/redmine.plist というファイルを作成します。plistはProperty List EditorまたはXCodeで編集できます

redmine.plistの中身は

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>redmine</string>
        <key>KeepAlive</key>
        <false/>
        <key>RunAtLoad</key>
        <true/>
        <key>WorkingDirectory</key>
        <string>/Users/nullpon/Documents/redmine</string>
        <key>ProgramArguments</key>
        <array>
                <string>/Users/nullpon/.rvm/bin/rvm</string>
                <string>use</string>
                <string>1.8.7@redmine</string>
                <string>-S</string>
                <string>passenger</string>
                <string>start</string>
                <string>-e</string>
                <string>production</string>
                <string>-p</string>
                <string>3001</string>
        </array>
        <key>StandardOutPath</key>
        <string>/dev/null</string>
        <key>StandardErrorPath</key>
        <string>/dev/null</string>
</dict>

RunAtLoadをtrueにするとOSの起動時に実行します。

KeepAliveをtrueにすると、プロセスが死んだとき自動で立ち上がるようになります。ただし、このケースでは使えませんのでfalseにしておきます。

ProgramArgumentsは実行するコマンドです。passengerはデフォルトで3000番ポートを使用しますが、3000を使うとRails開発時に被るので3001で起動しています。

最後にplistをlaunchdにロードします。

$ launchctl load ~/Library/LaunchAgents/redmine.plist

http://localhost:3001/Redmineにアクセスできれば完了です。

plistのタスクはlaunchctl start/stopで起動、停止できますが、この場合はできません(おそらくpassengerではなくrvmのプロセスを見てしまうため)。また同じ理由でKeepAliveも維持できないようです。

追記(2012/02/03)

rvm本体のバージョンを上げると起動しなくなりました(バージョン 1.8.0〜1.10.2)。どうやら rvm use x.x.x -S passenger ... を実行すると ERROR: unknown action 'ruby' と表示され -S オプションで指定したコマンドが実行できないのが原因のようです。rvm 1.7.3に戻したところ実行できました。

$ rvm get 1.7.3
$ rvm reload

しかし、-Sオプションで起動するのは launchd と相性が良くないので、直接Rubyのパスを指定して起動するのが良いと思います。