gemの依存性やバージョンを管理するのにとても便利なBundlerとCapistranoを連携してみる。
連携といっても、capistranoのcapコマンドで対象サーバにbundler使って依存gemをインストールするくらいだけど。
連携自体は簡単で、capistranoで生成したdeploy.rbの中に
require "bundler/capistrano"
という1行を加えるだけ。これでBundlerのcapistrano用タスクが読み込まれる。タスクが追加されたかどうかはcap -Tでわかる。
# cap -T cap bundle:install # Install the current Bundler environment. ...
とbundler:install というタスクが利用可能になってることが確認できる。また、bundler/capistranoのコードを確認すると
after "deploy:update_code", "bundle:install"
と定義されているため、deploy:update_codeが実行された後に自動的にbundle:installが実行される。
続いて、deploy.rbでこのbundler:installタスクに対して設定可能な項目が↓の内容。
# 読み込むGemfileのパス set :bundle_gemfile, "Gemfile" # gemの格納先(デフォはcapistranoでデプロイしたsharedフォルダ直下のbundleフォルダ) set :bundle_dir, File.join(fetch(:shared_path), 'bundle') # deployment mode の指定 set :bundle_flags, "--deployment --quiet" # Gemfileで定義されたgemのウチ、除外する環境 set :bundle_without, [:development, :test] # bundleコマンドのパス set :bundle_cmd, "bundle" # e.g. change to "/opt/ruby/bin/bundle"