为什么 Heroku 客户端 CLI 不能在 Capistrano 下工作?

Why doesn't the Heroku client CLI work under Capistrano?

我有一个 Capistrano 部署需要获取数据库 URL(使用部署机器,而不是目标)通过调用带有 Ruby 反引号的 Heroku toolbelt,即 heroku pgbackups:url --app strong-galaxy-5765。我已经在 Capistrano 2 下完成了几个月,但是现在,在升级到 Ruby 2.2 和 Cap 3 之后,在 Capistrano 任务中使用 Ruby 反引号调用 heroku 命令会产生一个空字符串。而且不仅仅是这个特定的命令:甚至 'heroku --version' returns 什么都没有。

数据点: * 标准 shell 命令可反勾并产生适当的输出 * 如果我给 'heroku' 命令一个绝对路径,行为是相同的。 * whoami 显示Capistrano任务下的用户是我。 * 我在带有反引号的通用 Ruby 脚本中尝试过的所有 heroku 命令都可以正常工作。 * 一切正常,直到我切换到 Capistrano 3 和 Ruby 2.2

所以 Capistrano 环境一定有什么东西,我正在爬墙试图弄清楚它会是什么。一个可能的线索:当 运行 'heroku' 命令时,我从我的 Capistrano 任务中得到以下错误输出:

/Users/upstill/.rvm/gems/ruby-2.2.0@global/gems/bundler-1.7.12/lib/bundler/definition.rb:380:in validate_ruby!': Your Ruby version is 1.9.3, but your Gemfile specified 2.2.0 (Bundler::RubyVersionMismatch) from /Users/upstill/.rvm/gems/ruby-2.2.0@global/gems/bundler-1.7.12/lib/bundler.rb:118:insetup' 来自 /Users/upstill/.rvm/gems/ruby-2.2.0@global/gems/bundler-1.7.12/lib/bundler/setup.rb:17:in <top (required)>' from /usr/local/heroku/ruby/lib/ruby/1.9.1/rubygems/custom_require.rb:36:inrequire' 来自 /usr/local/heroku/ruby/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 信息 'heroku pgbackups:url --app strong-galaxy-5765' =>(pid 46786 退出 1)

注意:我的 Ruby 环境是 2.2.0,如我所有的 Gemfile 所示,Cap deploy.rb 文件中的 rbenv_ruby,rvm,rbenv 和 'ruby -v'. Capistrano 做的所有其他事情都使用 2.2 环境。但是 'heroku --version' 显示 IT 是为 1.9.3 构建的。我很想为 2.2 构建它,但是 运行 新环境中的安装程序再次没有改变 Ruby 规范。

好吧,这就是我的死胡同。非常感谢任何帮助。

谢谢, 史蒂夫

改为通过自制软件安装工具带

$ brew install heroku