概要

PowでRedmineを動かすための手順です。

ポイント

手順のアウトラインは次のようになります。

  • rbenv + ruby-build のインストール
  • node.jsのインストール
  • Powのインストール
  • Redmineのためのrbenv/bundler/Powの設定
  • Rackの設定
  • Redmineプロジェクトの設定

RedmineはRuby/Railsのバージョンに激しく依存するため、Rubyのグローバルな空間にRedmineをインストールすることはおすすめできません。rbenvとbundlerを使ってプライベートな空間に閉じ込めるのが無難です。

rbenv + ruby-build のインストール

homebrew で簡単にインストールできます。説明は割愛します。

node.jsとPowのインストール

node.jsとPowをインストールしなければいけませんが、説明は割愛します。
ググれば情報がいっぱい出てきますので、PowでSinatraが動くあたりまで設定してください。

Redmineのダウンロード

RedmineのオフィシャルサイトからRedmineのバージョン1.3をダウンロードします。
http://www.redmine.org/

~/.pow/redmine に、Redmineのプロジェクトディレクトリへのシンボリックリンクを作成します。
これで http://redmine.dev/ にアクセスすることでRedmineが起動します。
が、まだ設定ができてないのでエラー画面が表示されると思います。

不要なシンボリックリンクを削除

早速設定をしていきたいところですが、その前に一つ雑用を。

プロジェクトルートディレクトリにあるredmineというシンボリックリンクを削除しておきます。
ファイルサーチが循環してtextmateが重くなるみたいでした。

Redmineの動作対象となるRubyのインストール

redmine 1.3 は ruby の1.9系に未対応です。
OS X Lionのデフォルトのrubyは1.8系なのでほっといても動きそうですが、ここは空気を読んでrbenvでruby 1.8.7の最新版のインストールしてください。

ruby 1.8.7をインストールするには次のコマンドを実行します

$ rbenv install ruby-1.8.7-p352

インストールができたら、redmineでruby 1.8.7を使うように設定を行います。
Redmineプロジェクトのルートディレクトリへ行き、次のようなファイルを作成します。

{RAILS.root}/.rbenv-version

1.8.7-p352

これでredmineのプロジェクトディレクトリにいるときはruby 1.8.7が使われるようになりました。

依存Gemのインストール

rubyの設定ができたので、次は依存するGemをインストールしていきます。
まずはbundlerをインストールします。

$ gem install bundler

次に依存するGemをGemfileに記述します。
redmine 1.3は次のようなGemに依存しているようです。

/var/www/redmine/Gemfile

source "http://rubygems.org"
gem "rails", "2.3.14"
gem "rake", "0.8.3"
gem "rack", "1.1.0"
gem "i18n", "0.4.2"
gem "rubytree", "0.5.2", :require => "tree"
gem "RedCloth", "~>4.2.3", :require => "redcloth" # for CodeRay
gem "mysql2", '< 0.3'
gem "coderay", "~>0.9.7"

mysqlアダプタはmysql2を使います。最新のバージョンをインストールすると以下のようなエラーが出てしまうので、0.2系を使うように指定してください。

Could not find gem 'activerecord-mysql2-adapter (>= 0) ruby' in any of the gem sources listed in your Gemfile.

Gemfileの作成が終わったらbundle installします。グローバル空間でなく必ずプライベート空間にインストールしてください。

$ bundle install --path vendor/bundle

Rackの設定

RedmineをRackアプリとして動かすためにconfig.ruが必要です。
プロジェクトのルートディレクトリに次のようなファイルを作成します。

{Rails.root}/config.ru

require "./config/environment"
run ActionController::Dispatcher.new

Redmineプロジェクトの設定

ここまででRedmineをRackアプリとして動作させる準備が整いました。
次にRedmineプロジェクトの設定をしていきます。

とりあえずなにかrakeタスクを動かしてみてください。プロジェクトに必要な設定がされていなければエラーが出力されます。このエラーを全てつぶしていきます。

config/environment.rb にセッションの設定を入れろといわれたので入れます。

config/environment.rb

config.action_controller.session = { :key => "_redmine_session", :secret => "0c85e551137cc747789ddff6b6f66a5ce319219bf5cadad3e44d9eed914d7cf2f3759d4de41174d109c9b213db1e41fa48666615ecaf3a7e800ca18fc041cdee" }

次に、データベースの設定を行います。
MAMPのmysqlを利用するので次のように設定しました。developmentモードのDBを作るのは面倒なのでproductionモードと同じにしておきました。

config/database.yml

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: root
  password: root
  encoding: utf8
  socket: /Applications/MAMP/tmp/mysql/mysql.sock

development:
  adapter: mysql2
  database: redmine
  host: localhost
  username: root
  password: root
  encoding: utf8
  socket: /Applications/MAMP/tmp/mysql/mysql.sock

次に、データベースのマイグレーションを行います。

$ bundle exec rake db:migrate RAILS_ENV=production
$ bundle exec rake db:migrate_plugins RAILS_ENV=production

Rails2.3でBundlerを利用する設定

* 2011-12-21 21:30に追記

Rails2.3のプロジェクトでBundlerを利用する場合、次の設定が必要です。
設定しなければ vendor/bundle 以下にインストールしたgemが読み込まれません。

config/boot.rb の Rails.boot! と書かれているのすぐ上の行に以下のコードを追加します。

config/boot.rb

class Rails::Boot
  def run
    load_initializer

    Rails::Initializer.class_eval do
      def load_gems
        @bundler_loaded ||= Bundler.require :default, Rails.env
      end
    end

    Rails::Initializer.run(:set_load_path)
  end
end

config/preinitializer.rb というファイルを作成し、次のコードを記述します。

config/preinitializer.rb

begin
  require "rubygems"
  require "bundler"
rescue LoadError
  raise "Could not load the bundler gem. Install it with `gem install bundler`."
end

if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("0.9.24")
  raise RuntimeError, "Your bundler version is too old for Rails 2.3." +
   "Run `gem install bundler` to upgrade."
end

begin
  # Set up load paths for all bundled gems
  ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__)
  Bundler.setup
rescue Bundler::GemNotFound
  raise RuntimeError, "Bundler couldn't find some gems." +
    "Did you run `bundle install`?"
end

ここを参照しました。
Using Bundler with Rails 2.3

PowでrbenvでインストールしたBundlerを使う設定

* 2011-12-22 13:30に追記

Powでrbenv環境下のGemを使う場合、Powにrbenvのパスを教えてあげないといけないようでした。プロジェクトのルートに.powenvファイルを作成することでPowの環境変数を設定できます。次のようなファイルを作成してください。

{Rails.root}/.powenv

export PATH="/Users/cohakim/.rbenv/shims:/Users/cohakim/.rbenv/bin:$PATH"

Powの再起動

tmp/restart.txt を更新することでPowを再起動できます。

touch tmp/restart.txt

Redmineにアクセスする

以上で動作のための設定は終わりです。
http://redmine.dev/ にアクセスします。Redmineのホームが表示されていれば成功です。

Powをproductionモードで起動する

動いたのはいいのですが、なんだか非常にもっさりです・・・。どうやらdevelopmentモードで動いているようです。Powでアプリをproductionモードで起動するには.powenvに次の行を追加します。

{Rails.root}/.powenv

export RAILS_ENV=production

Powを再起動してアクセスすると・・・。
サックサクやで!!!

終わりに

以上でPowでRedmineを動かす その2 終わりです。

rbenv + Pow + bundler + rails 2.3 を組み合わせると、設定しなければならないことが沢山でてくるみたいです。

Powで動かすことに意味があるのかと問われると言葉に詰まるところではあるのですが、とりあえずやってみましたということでお願いします。

エラーがでてどうしようもない場合

まずRailsのログを確認してみましょう。
Ralisが動作しているなら logs/production.log にログが出力されているはずです。
ログ出力がない場合、Rails導入以前でつまずいている可能性があります。
また、ruckup コマンドでコンソールからサーバを起動することでエラーログを確認することもできます。

$ bundle exec rackup config.ru

エラーがでてからのゴタゴタ

* エラーの回避方法がわかりました。追記したので、「Rails2.3でBundlerを利用する設定」をみてください。

僕の環境では依存しているGem(rack 1.1.0)が見つかりませんとでました。
vendor/gems 以下に依存Gemをおかないとダメみたいです。以下のコマンドでrailsとgemをフリーズしました。

$ bundle exec rake rails:freeze:gems
$ bundle exec rake gems:unpack

しかしこれもダメでした。railsはフリーズされたのですが、gemはunpackされませんでした。
しかたないので、vendor/bundle 以下のgemファイルを vendor/gems にコピーしました。

まだ起動に失敗しますが、エラーメッセージは変わりました。

config.gem: Unpacked gem coderay-0.9.8 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.

specファイルをrefreshしろといわれたので、いわれるままコマンドを実行しました。

bundle exec rake gems:refresh_specs

この後Powを再起動して、http://redmine.dev/ にアクセス・・・。
動きました!!!