torutkのブログ

ソフトウェア・エンジニアのブログ

Redmine 1.4.0でのBundlerに関して

Redmine 1.4.0が出ましたが、今までと違いrailsを同梱しなくなってしまいました。
また、gemのパッケージを管理するBundlerが適用されるようになり、非インターネット接続環境でのインストールが面倒になってしまいました。

1.3.2から1.4.0にアップデートするに当たり前のバージョンのように、必要なgemをあらかじめインストールしてからrakeコマンドを実行してみると、bundleのインストールが足りないとエラーになりました。残念ながら、bundleを通してインストールしないと、rakeコマンドがエラーになってしまうようです。

# rake db:migrate RAILS_ENV="production"
Some gems may need to be installed or updated.
Please run `bundle install --without development test`.
#

ここで、エラーメッセージにあるコマンドを実行してみると、

# bundle --without development test
Fetching gem metadata from http://rubygems.org/.
Error Bundler::HTTPError during request to dependency API
Fetching full source index from http://rubygems.org/
Could not reach http://rubygems.org/
#

と非インターネット接続環境なのでエラーになります。

調べまわっていると、bundleコマンドにも--localオプションがあるようです。
必要なgemをあらかじめ、/vender/cacheというディレクトリを作成して格納しておくと、そこから読み取ってインストールするようです。

必要なgemは、/Gemfile に記載されています。
ただし、railsについては、Gemfileに書かれているrailsがさらに複数のgemに依存しているため、依存を含めて集めておく必要があります。(gem fetch -v 2.3.14 actionmailer のように)

そして、bundleコマンド実行ですが、

# bundle install --without development test postgresql sqlite --local

のように実行します。通常MySQLを使うので、PostgreSQLSQLiteは使わないためです。