redmineのインストール時にバージョン依存でハマる時のヒント
以前にRedmineをインストールしていた頃の手順書を引き継ぎ、久々に作業をしてみたら、見事に入らない。Redmineのバージョン、Rubyのバージョンなどは以前通りにしているにも関わらず、インストール中に
インストールされているモジュールAのバージョンは*.*.*
依存しているモジュールBはモジュールAの <*.*.* を要求している
といった主旨の英語のメッセージが表示されます。これは過去に動いていたバージョンの組み合わせであったも、途中でインストールされている各種モジュールのバージョンが上がり、それにより依存性が崩れてしまうようなのですね。これは公式サイトに掲載されている手順にしても同様ですし、Qiitaなどに掲載されている手順にしても動かないものもあります。
まずは最低限、調べる必要があるのは、
・プラグインを利用する場合は、前提となるRedmineのバージョン(各プラグインの配布サイトなど)
・インストールするRedmineのバージョンと、前提となるRuby、Railsのバージョン(公式サイト)
Rubyのバージョンについては、OSのバージョン、ディストリビューションなどによってはリポジトリからのインストールが難しい事がありますので、結局はソースのtarボールからインストールした方が早い事が多いです。
configureして、make , make install で基本的には完了。
アンインストールする場合は make uninstall でOKです。
ここまでは問題なく進むと思います。
問題は、ここから gem を使って rack や bundler のインストールで、手順としては以下のようなコマンドが紹介されています。
# gem install rack --no-rdoc --no-ri # gem install bundler passenger --no-rdoc --no-ri
この方法だと、どのバージョンが入るか分かりません。後続処理でバージョン依存性でエラーが出た場合には、例えば
# gem install rack -v=1.6.4 --no-rdoc --no-ri
のように、-v オプションを使って、インストールするバージョンを明示することで、回避する事が出来ます。
また Redmine のファイルを展開して、必要なGemパッケージを bundleを使ってインストールする際に、以下のコマンドが紹介されています。
# bundle install --without development test rmagick --path vendor/bundle
ただ、最近では “–without" が deprecated (非推奨)となり
[DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set path 'vendor/bundle'`, and stop using this flag [DEPRECATED] The --binstubs option will be removed in favor of `bundle binstubs`
といった警告メッセージが出てきます。今後のバージョンではremoveされる可能性があるとな。
回避方法はメッセージに表示されている通りで、
# bundle config set path 'vendor/bundle'
としていきます。これを実行すると ~/.bundle/config ファイルが作成され、パスが記述されています。これらを設定してから
# bundle install
を実行してインストールを進めます。
大変だなあとつぶやいてみたら、@y503Unavailable 氏よりコメント頂きました。
そうなんですよ。機能を使うだけでしたら既存のSaaSやbitnamiなどのスタックを使った方が楽ちんです。(bitnamiは自分も以前に使ってみたことがある。大手クラウドプラットフォームには仮想サーバーのテンプレートなども、起動するだけでOK)問題はプラグインの依存バージョンが変わった時に、それに追従できるかですね。(私のケースがこれ)