namespace :load do task :defaults do # Heavily depends on 'capistrano-rbenv' variables: # https://github.com/capistrano/rbenv/blob/master/lib/capistrano/tasks/rbenv.rake#L33-49 # set :rbenv_type # :user or :system # set :rbenv_ruby, '2.0.0-p247' # ruby version # set :rbenv_roles, :all # where rbenv should be installed # set :rbenv_path, # ~/.rbenv or /usr/local/rbenv, depends on :rbenv_type # set :rbenv_ruby_dir # "#{fetch(:rbenv_path)}/versions/#{fetch(:rbenv_ruby)}" } set :rbenv_ruby_build_path, -> { "#{fetch(:rbenv_path)}/plugins/ruby-build" } end end namespace :rbenv do desc 'Install rbenv' task :install_rbenv do on roles fetch(:rbenv_roles) do next if test "[ -d #{fetch(:rbenv_path)} ]" execute :git, :clone, 'https://github.com/sstephenson/rbenv.git', fetch(:rbenv_path) end end desc 'Install ruby build - rbenv plugin' task :install_ruby_build do on roles fetch(:rbenv_roles) do next if test "[ -d #{fetch(:rbenv_ruby_build_path)} ]" execute :git, :clone, 'https://github.com/sstephenson/ruby-build.git', fetch(:rbenv_ruby_build_path) end end desc 'Install ruby' task :install_ruby do on roles fetch(:rbenv_roles) do next if test "[ -d #{fetch(:rbenv_ruby_dir)} ]" execute "#{fetch(:rbenv_path)}/bin/rbenv", :install, fetch(:rbenv_ruby) end end desc 'Install bundler gem' task :install_bundler do on roles fetch(:rbenv_roles) do next if test :gem, :query, '--quiet --installed --name-matches ^bundler$' execute :gem, :install, :bundler, '--quiet --no-rdoc --no-ri' end end desc 'Install rbenv, ruby build and ruby version' task :install do invoke 'rbenv:install_rbenv' invoke 'rbenv:install_ruby_build' invoke 'rbenv:install_ruby' end before 'rbenv:validate', 'rbenv:install' after 'rbenv:map_bins', 'rbenv:install_bundler' end