Redmine を rbenv + ruby-build + bundler + sqlite3 で導入 / 構築する

追記 2012/07/26

現在のRedmineの最新バージョンは 2.0.3 で、それはいいんだけど

Redmine 1.4よりRedmineが依存するgemの管理のためにBundlerが使われるようになりました。依存するgemのインストール・アップデートを行うために、Redmineのインストールディレクトリで bundle update (Redmine 1.4以降) または bundle install (Redmine 1.3以前) を実行してください。

ってあるようにこの記事がうpされてる1.3.2では標準では bundler で導入ではなかったし GemFileも自作剃る必要があった。でも今では標準でbundlerを使うようになってるし、きっとたぶん標準でGemFileが用意されている。なので、以下の説明は若干古い可能性はある。

誰得

社内のBTSがRedmineで今日ちょっとなんかあったから、なんとなくRedmine鯖を立ててみようとした。せっかくだからrbenv+bundlerでサンドボックス化しようとしたらいろいろとハマったのでメモる。というかこの4時間くらいの調査と作業をまとめておきたい。
はっきり言って誰得である。ちゃんと使うならMySQLだろうしApacheなりNgingxなりで串ったり、そもそも専用鯖として立てるためにbundlerでいらないところでハマる必要ない。

前提::rbenv+ruby-build+bundler環境を整える

Sass環境を整えるためにrbenv+ruby-build+bundlerしたメモ - AtAsAtAmAtArA
これの続きなのでいちおう ruby 1.9.3-rc1 が global にはいっているという前提。まあ手順どおりにやればハマることはきっとない
あとOSはUbuntuです。なんか yum install sqlite3-devel とかいろいろ出てきたからみんなCentOSで立ててるんですか?

手順

だいたい公式ドキュメントに準じている。が、いろいろとハマった。
Redmineのインストール | Redmine.JP

Redmine本体の入手

以下のページから好きなバージョンを入手。現時点での最新版の Redmine 1.3.2 を構築する。

#tgzを入手
wget http://rubyforge.org/frs/download.php/75910/redmine-1.3.2.tar.gz
#解凍
tar xzvf redmine-1.3.2.tar.gz
#いらなかったら消す
#rm redmine-1.3.2.tar.gz
#これ以後は下記のディレクトリで作業する
cd redmine-1.3.2
pwd
#/home/atasatamatara/redmine-1.3.2

ruby 1.8.7 をインストール & 有効にする

rbenv install 1.8.7-p358
rbenv global 1.8.7-p358
#現在のバージョンを確かめる
ruby -v
#ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux] 

bundlerも 1.8.7 用にインストールする必要がある

rbenv exec gem install bundler

Gemfileの作成

ここが一番ハマったかもしれない。Redmineの必要条件にはRailsとRackしか書いてないけど、実際はこのあと必要になるもろもろをインストールしておいたほうがいい。

#atasatamatara@dev:~/redmine-1.3.2$ cat Gemfile

source "http://rubygems.org"

#公式ドキュメントに準じる
gem "rails", "2.3.14"
gem "rack", "1.1.1"
#SQLite3を使うなら。現時点での最新は1.3.5だった気がするけど、それでははいらなかった
#当然SQLite3自体は入れておくこと
#sudo apt-get install sqlite3
gem "sqlite3-ruby", "1.3.3"
#buildツール、らしい。これもバージョン依存が激しいらしい
gem "rake", "0.8.7"
#なんか必要らしい
gem "rdoc", "2.4.2"
#入れろといわれたからいれたけどよくわからない
gem "rubytree", ">= 0"
gem "coderay", "~> 1.0.0"
bundle install --path vendor/bundle

SQLite3の設定

デフォルトだとこんなエラーがでる

ERROR:  Error installing sqlite3-ruby:
    ERROR: Failed to build gem native extension.

/usr/bin/ruby1.8 extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Try 'port install sqlite3 +universal' or 'yum install sqlite3-devel'
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/usr/bin/ruby1.8
    --with-sqlite3-dir
    --without-sqlite3-dir
    --with-sqlite3-include
    --without-sqlite3-include=${sqlite3-dir}/include
    --with-sqlite3-lib
    --without-sqlite3-lib=${sqlite3-dir}/lib

おれはyumなんてつかえねぇ!portでもねぇ!とあちこち探してたらやっと同じ症状の人に巡り会えた。
Ubuntuならそのままだとsqlite3-rubyがインストールに失敗するはずなので以下を入れておく。

sudo apt-get install libsqlite3-dev

参考::sqlite3-ruby install error on Ubuntu - Stack Overflow

データベースまわりの設定

config/database.ymlを設定する

#サンプルからコピーしておく
cp config/database.yml.example config/database.yml
vi config/database.yml

sqlite3周りだけ設定して、あとはコメントアウトでもしておく

production:
  adapter: sqlite3
  dbfile: db/redmine.db

参考::磁力式駆動: プロジェクト管理ツールRedmineをSQLite3で利用する。

セッションストア秘密鍵を言われるがままに作成する

#bundle 経由でこれからも操作を行う
bundle exec rake config/initializers/session_store.rb

データベース上にテーブルを言われるがままに作成する

これも順番を間違えるとなんかうまくいかない

#環境変数?
RAILS_ENV=production
#これもこうやって引数をわたさないとなんかうまくいかない
bundle exec rake db:migrate RAILS_ENV=production

参考::railsの実行モードの設定 RAILS_ENV

デフォルトデータをデータベースに言われるがままに登録する

#さっき環境変数に登録したはずだけどいちおう
RAILS_ENV=production
#これもさっきと同じで引数に与えてやる感じ。なぜか公式ドキュメントと逆になってる……
bundle exec rake redmine:load_default_data RAILS_ENV=production

localeを聞かれるのでとりあえず ja って答えておいた

パーミッション言われるがままに登録する

公式ドキュメントではそうなってるが、その前に redmineユーザーを作らなくてはならない

sudo useradd redmine

で、登録

#今回はatasatamataraグループに所属させる。じゃないとあとでパーミッションでエラーになる。
#自分のhomeでやってるからこうなる
sudo chown -R atasatamatara:redmine files log tmp public/plugin_assets
#パーミッションの変更
sudo chmod -R 755 files log tmp public/plugin_assets

実際に起動する!

#これもbundle経由で行う
bundle exec ruby script/server webrick -e production

実際にアクセスしてみましょう

http://localhost:3000/
#自分の場合はVirtualbox上で動いているのでこっちだった
#サーバー自体は0.0.0.0:3000で動いてくれるからどっからでもアクセスできる
#Djangoの開発サーバーみたいにデフォルトだと外部からみれれないとかなくてよかった……
#http://192.168.56.101:3000/

最初の管理者は admin:admin でいけます。とりあえず管理や設定から日本語にしたりプロジェクトつくったりユーザー登録したりできました。
Redmineの実践的な内容は他のエントリに譲ります。出オチですが、これは単にrbenv+ruby-build+bundler+sqlite3経由で環境を作ってみたかっただけです。

感想

Rubyは依存が激しいよママン。不思議な呪文が必要だよママン。