gem管理の新標準ツール"Bundler"のTips


BundlerrubygemsRails3gem
Bundler使


gem

gemgem





BundlerTips

Bundlerは1.0系以降を使おう


2010/07/03bundler0.9(stable)1.0(beta)
1.0
 --pre 1.0.0.beta2
$ gem install bundler --pre

bundler-1.0.0.beta2

Bundlerで入れたgemをシステムのgemと分離しておきたい

$ gem list

gem $GEM_HOME *1
$ echo $GEM_HOME
/home/mirakui/.rvm/gems/ruby-1.9.2-head


 bundle install 使 Gemfile gem $GEM_HOME gem
gem$GEM_HOME*2
$ bundle install [DIR]

gemDIR$GEM_HOME
$ bundle install vendor/bundle


 bundle install 使Bundler .bundler/config 
$ cat .bundle/config
--- 
BUNDLE_DISABLE_SHARED_GEMS: "1"
BUNDLE_WITHOUT: ""
BUNDLE_PATH: vendor/bundle

BUNDLE_PATHBundlerBUNDLE_PATHgem.bundle/config
$ bundle install

.bundle/config bundle install 
$ bundle


システムに同じgemが入っていたらそちらが使われる


 $GEM_HOME  nokogiri Gemfilenokogiribundle install $GEM_HOME nokogiri使
--disable-shared-gems 
$ bundle install vendor/bundle --disable-shared-gems

bundle install

Bundlerが入れたgemを使ってrubyを実行したい


bundle exec使BUNDLE_PATHgem使
$ bundle exec ruby your-script.rb

irb
$ bundle console

 bundle exec irb 

コンパイルオプションの指定が必要なgemをbundlerで入れたい


1.0.0.beta2Gemfilegem
--with-ruby-includeruby-debug19
$ cat Gemfile
  :
gem 'ruby-debug19'

$ bundle install vendor/bundle --disable-shared # ruby-debug19のコンパイルエラー
$ env GEM_HOME=`pwd`/vendor/bundle gem install ruby-debug19 -- --with-ruby-include=$rvm_ruby_src_path # bundle install の前にvendor/bundleにgemを入れておく
$ bundle install # 成功

cronからrvmとbundlerを使いたい


cronruby
RVM使$HOME/.rvm/scripts/rvm source
 * * * * * source $HOME/.rvm/scripts/rvm; rvm your-ruby-version; cd /path-to-project/; bundle exec ruby your-script.rb


bundlerTips2


Bundler1.0bundle installbundle lockbundle installGemfile.locklock

bundle install Gemfile.lockgembundle install  bundle update 

bundle installsource調bundle packagevendor/cachegem

*1:user-installの場合

*2:個人の感想であり実際の効果とは異なる場合があります