Redmineテーマやプラグイン開発環境を構築する (rbenv版)


テーマやプラグインが開発したくなったので運用環境で作業せずに開発環境を構築してみたメモ。

RVMからrbenvに切り替えたので http://qiita.com/items/31982ee3de80efa4c31b の書き直し。

# 前提

ポリシー的にはなるべく簡単に、そして環境を限定的に。

* Redmine 2.x向け
* GitでRedmine本体を管理する
* Redmine本体の開発については対象外
* 自分のテーマやプラグインは個別のGitリポジトリで管理(submoduleとかは使わない)
* rbenvを使う
* gemパッケージはbundlerでプロジェクト内にインストールする
* データベースはSQLiteを使う

### RVM版からの変更点

* RVMの代わりにrbenvを使う
* gemsetの代わりにbundler install --pathでRedmineのディレクトリにインストール
 * コマンドを叩くときにbundle execする


# rbenvのセットアップ

## OS X

OS Xが楽。Homebrew + bashの例

```
brew update
brew install rbenv
brew install ruby-build
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

## Ubuntu

Ubuntuはaptでrbenvは見つかったが古い、そしてruby-buildがない。でもrbenv/ruby-buildともにgitから取得するだけでいいようだ。

```
git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile
echo 'eval "$(rbenv init -)"' >> ~/.profile
```

# Redmineの実行環境を作る

## Redmineの配置

```
git clone https://github.com/redmine/redmine redmine-dev
cd redmine-dev
git checkout -b develop/2.2.1 2.2.1
```

Redmineをgitで落として、バージョンのタグからdevelop/{version}という名前のローカルブランチを作って使う。

## Rubyのインストール

RedmineのRubyのバージョンを確認する。
http://www.redmine.org/projects/redmine/wiki/RedmineInstall

rbenvをセットアップしておき、適切なRubyのバージョンを以下のようにインストールする。Rubyのインストールを後回しにしたのはrbenv localをRedmineのパスで実行したかったそれ以上の深い理由はなし。

```bash
rbenv install 1.9.3-p327
gem install bundler
rbenv rehash
```

## Redmineのセットアップ

**Redmine 2.3.1にあげたらGemfileが改良されておりdatabase.ymlのadapterを見て適切なデータベースドライバをインストールするようになり、--without mysqlなどのグループによる除外が機能しなくなる**

```/path/to/redmine-dev
cp -p config/database.yml.example config/database.yml
```

でデータベースの構成ファイルを作成して以下のように修正。

```config/database.yml
production:
  adapter: sqlite3
  database: db/production.sqlite3
development:
  adapter: sqlite3
  database: db/development.sqlite3
test:
  adapter: sqlite3
  database: db/development.sqlite3
```

bundlerで依存モジュールを解決する。

```/path/to/redmine-dev
rbenv local 1.9.3-p327
bundle install --without development test rmagick mysql postgresql --path vendor/bundle
```

粛々とセットアップ。

```/path/to/redmine-dev
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake redmine:load_default_data
mkdir tmp tmp/pdf public/plugin_assets
```

## Redmineの実行

```/path/to/redmine-dev
bundle exec ruby script/rails server webrick -e production
```

で実行して、 http://localhost:3000/ にアクセス。admin/adminでログインできる。

あとはテーマやプラグインを好き勝手に開発。基本的にRedmine本体の開発はしないのでredmine-dev/.gitはRedmineのバージョンアップ時にブランチを切り替えるだけで特にコミットはせず、自分のテーマやプラグインについてはnew fileで差分が出たままの状態にしておく。

## Redmineバージョンアップ時の作業

リポジトリの最新を取得して、新しいバージョンのタグからローカルブランチを切り替えてデータのマイグレーションとかを行う。

ブランチの切り替え

```/path/to/redmine-dev
git checkout master
git pull; git pull --tags
git checkout -b develop/x.x.x x.x.x
```

データの再セットアップ。

```/path/to/redmine-dev
bundle install --without development test rmagick mysql postgresql --path vendor/bundle
bundle exec rake db:migrate RAILS_ENV="production"
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
bundle exec rake tmp:cache:clear
bundle exec rake tmp:sessions:clear
```

.bundle/configに前回のオプションが残っているからbundle installのオプションはいらない気もするけど念のため。