为什么 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:in
setup'
来自 /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:in
require'
来自 /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
我有一个 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:in
setup'
来自 /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:in
require'
来自 /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