【问题标题】:How to raise error if cap deploy was not invoked using bundle exec如果未使用 bundle exec 调用 cap deploy 如何引发错误
【发布时间】:2011-07-01 00:16:18
【问题描述】:
我刚刚遇到了 capistrano 部署 gem 依赖项的一个微妙问题,我想强制执行 capistrano 的调用方式。
如何检测到 capistrano 是使用 'bundle exec' 调用的,如下所示:
bundle exec cap app deploy
不是这样的:
cap app deploy
我想在后一种情况下通过检测我的 deploy.rb 文件顶部的调用方法来引发错误。
【问题讨论】:
标签:
ruby-on-rails
capistrano
bundler
【解决方案1】:
似乎 Bundler 在运行可执行文件时设置了 $BUNDLE_BIN_PATH 和 $BUNDLE_GEMFILE 环境变量。例如,这样做:
env >/tmp/1
bundler exec env >/tmp/2
diff -u /tmp/[12]
您会看到环境的差异。
那么在您的部署脚本中,您可以执行以下操作:
abort "You must run this using 'bundle exec ...'" unless ENV['BUNDLE_BIN_PATH'] || ENV['BUNDLE_GEMFILE']
希望这会有所帮助。