Develop with pleasure!

福岡でCloudとかBlockchainとか。

CapistranoとBundlerの連携

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"