Satoryu's Diary

Rubyが好きなプログラマーの日記。日々の生活、開発に関するメモとか考えとか。


2014年03月22日 [長年日記]

_ bundlerで管理してるCapistranoでrun_locally でbundleコマンド の実行は要注意

最近、Capistrano 3 を使ってgit cloneしたり、デプロイするなどゴニョゴニョするタスクを書いている。 個人的には、そういったデプロイ関連のツールはアプリケーション本体とは切り離して、別のリポジトリで管理する方が好きなので、そこをbundlerでgemの管理をしている。

で、そんなgem管理の元で、

task :bundle_locally do
  run_locally do
    within fetch(:rails_root) do
      execute :bundle, :install
    end
  end
end

みたいにbundlerをローカルホストで実行するようなタスクを、bundle exec cap stage bundle_locally とやってしまうと、期待した動作をしてくれない。

というのは、当たり前といえば当たり前で、Capタスクをbundler経由で実行した際に、BUNDLER_なにがしな環境変数が定義され、それらを引き継いだまま内部のbundlerが実行されるためだ。 Capistranoを実行するときは、bundler経由にしない方が無難そう。 Bundler.with_clean_envを使えば出来そうではあるが、タスクのコードが見やすいかというと、ブロックネスト地獄になるので、控えたい。

参考


最近の投稿

翻訳しました(ちょっとだけ)

follow us in feedly