最近,Redmineは大きめのバージョンアップが行われました.
一つはRuby1.9 対応,もう一つは,Ruby on Rails 3.x 対応です.Ruby on Rails 3.x 対応したRedmine2.0.x は,私は結構快適に使えているのですが,使いたいプラグインがまだ対応していないため,ポート番号を変えて,必要なときにはRedmine 1.4.x の環境も起動しています.
どちらかを落として,もう片方を起動というのを繰り返すと,毎回立ち上がるのにそれなりの時間がかかるため,まとめて2つの環境を作ってます.使ってるのは自分くらいなのでマシン性能負荷はあまり気になりません.
こういう使い方をしているのですが,thin を使用して起動しようとすると,rack の要求バージョンがRedmineのバージョンによって異なるため,エラーになってしまいます.複数のバージョンが入っていても,Gemfileで指定してあればそちらを使用すると思っていたのですが,thin コマンドからの起動では異なるか,自分の理解が不足しているようです.
redmine v1.4.x では,rack のバージョンは,1.1.3,
redmine v2.0.x では,rack のバージョンは,1.4.1,
を用いるように指定されています.
しかし,1.4.x の環境をthin コマンドで起動しようとすると,rack 1.4.1 を使おうとしてしまいます.
そのため,v1.4.x では,webrick 起動,v2.0.x では thin 起動というようなことをしていたのですが,今回,この解決方法が分かりました.
依存ライブラリをrubyの共通lib フォルダで管理するのではなく,各プロジェクトごとに管理することで解決しました.
% bundle install -i vender/bundle
とすることで,vender/bundle に入るようになります.
このあと,起動も
% bundle exec rails s -e production
とすることで,インストールしたパスの方を参照するようになります.
通常に起動しただけでは,標準 gem フォルダを参照してしまいます.
bundle で, thin とeventmachine が入らないのでgem コマンドでインストールする必要があります.Gemfileに追加すれば,できそうな気がしますが,eventmachine に関しては,最新のバージョンのものを引っ張ってくるために,"--pre"オプションを付ける必要があるのですが Gemfile上でそれを表現する方法がわかりませんでした.
gem コマンドでインストールするときには,bundle で指定したパスに入るようにオプションで,インストール先を指定する必要があります.
% gem install -i vendor\bundle\ruby\1.9.1 eventmachine --pre
Fetching: eventmachine-1.0.0.beta.4.1-x86-mingw32.gem (100%)
Successfully installed eventmachine-1.0.0.beta.4.1-x86-mingw32
1 gem installed
続いて,thin のインストール.
% gem install -i vendor\bundle\ruby\1.9.1 thin
Fetching: thin-1.3.1.gem (100%)
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
Successfully installed thin-1.3.1
1 gem installed
うまく入ったので bundle 経由でthin を実行してみます.
% bundle exec thin -e production -p 4000 start
>> Using rack adapter
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4000, CTRL+C to stop
あと,bundle から thin を呼ぶ場合には,Gemfileにthin を記述しておく必要があるっぽい.
gem "thin"
そのため,上記の1行を追加しておきました.