capistrano-rbenv:为什么忽略rbenv_ruby?

时间:2017-05-02 16:58:24

标签: ruby-on-rails ruby capistrano rbenv

行。所以我正在尝试使用capistrano部署新版本的应用程序。我正在使用rbenv,安装了1.8.7(对于旧应用程序)和2.4.1安装(对于新应用程序)。我的Capfile包括:

require "capistrano/rbenv"

和我的deploy.rb:

set :rbenv_type, :user
set :rbenv_ruby, "2.4.1"

namespace :deploy do
  desc "Show ruby version"
  task :ruby_version do
    on roles(:all) do |h|
      execute "ruby --version"
      execute "rbenv versions"
    end
  end
end

运行cap production deploy:ruby_version会产生:

00:00 deploy:ruby_version
      01 ruby --version
      01 ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux]
    ✔ 01 deploy@example.com 0.390s
      02 rbenv versions
      02   system
      02 * 1.8.7-p370 (set by /home/deploy/.rbenv/version)
      02   2.4.1
    ✔ 02 deploy@example.com 0.371s

我尝试过各种各样的事情 - set :default_env, {"RBENV_VERSION => "2.4.1"},删除/home/deploy/.rbenv/version(这使我使用system ruby​​) - 但似乎没有任何东西让rbenv_ruby覆盖其他设置。

rbenv_ruby设置为不存在的版本会引发错误,因此它似乎在做某事。

我疯了。我做错了什么?

1 个答案:

答案 0 :(得分:2)

好。而不是

execute "rbenv versions"

我想:

execute :rbenv, "versions"

两者看起来很相似,但完全不相同:

http://capistranorb.com/documentation/getting-started/tasks/

  

tl; dr:执行(:bundle,:install)和执行('捆绑安装')行为不一样!

siiiiiiiiiiiiiiigh