我有一个Capistrano部署需要通过使用Ruby反引号调用Heroku toolbelt来获取数据库URL(使用部署机器,而不是目标),即heroku pgbackups:url --app strong-galaxy-5765
。我已经在Capistrano 2下完成了几个月,但是现在,在升级到Ruby 2.2和Cap 3之后,在Capistrano任务中使用Ruby反引号调用heroku命令会产生一个空白字符串。而且这不仅仅是这个特殊的命令:即使'heroku --version'也不会返回任何内容。
数据点:
*标准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`requiren'
INFO'heroku pgbackups:url --app strong-galaxy-5765'
=&GT; (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规范。
好的,这是我的死胡同。任何帮助都会受到极大的赞赏。
谢谢, 史蒂夫
答案 0 :(得分:0)
通过自制软件安装工具带
$ brew install heroku