Rails2.3.8へのBundler導入
Rails2.3.8のPjにBundlerを導入してみた。
まずは既存の環境にbundlerをインストール。
$ sudo gem instal bundler
Railsプロジェクトに移動
$ cd #{RAILS_ROOT}
Gemfileの作成(内容省略、確実なのはgem listで表示されたものを入れること。今使っているものをそのまま使えば、少なくともgemのversionによる依存関係の問題は発生しない)
$ emacs Gemfile
ここからはBundlerのOfficialサイトにあった、Rails2.3系のプロジェクトのBundlerの導入方法に従った。
http://gembundler.com/rails23.html
gemのパスをbundlerものに認識するよう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
bundlerがインストールされているか、Versionが古すぎないかをチェックするため、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
サーバ側とRails側の準備ができたので、gemをインストール、
$ bundle install --path ./vendor/bundle # サーバ起動 $ bundle exec rails script/server -d
とここまでは順調に進めていたのだけどいのだけど、Production環境でエラーが発生。原因はmysqlのgem。
どうもmysqlはbundlerを想定していない作りらしく、そのままbuildするとmysqlのクライアントライブラリとかをソース内に記載されている相対パスで見てしまうらしい。
なので、gemをインストールする前にbuildパスを設定する必要がある。また、もう一つの注意点として環境によっては対象マシンが64bitだと明記する必要がある模様。
$ bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config $ # envでARCHFLAGSが設定されているか確認。設定されていたら下記の上一行は不要。 $ export ARCHFLAGS="-arch x86_64" $ bundle install --path ./vendor/bundle