atlas_recipe :rbenv do
during :provision, %w(install write_vars)
end
namespace :atlas do
namespace :rbenv do desc "Install rbenv and compile ruby" task :install do invoke "atlas:rbenv:run_installer" invoke "atlas:rbenv:add_plugins" invoke "atlas:rbenv:modify_bashrc" invoke "atlas:rbenv:compile_ruby" end desc "Install the latest version of Ruby" task :upgrade do invoke "atlas:rbenv:add_plugins" invoke "atlas:rbenv:update_rbenv" invoke "atlas:rbenv:compile_ruby" end task :write_vars do on release_roles(:all) do execute :mkdir, "-p ~/.rbenv" execute :touch, "~/.rbenv/vars" execute :chmod, "0600 ~/.rbenv/vars" vars = "" fetch(:atlas_rbenv_vars).each do |name, value| execute :sed, "--in-place '/^#{name}=/d' ~/.rbenv/vars" vars << "#{name}=#{value}\n" end tmp_file = "/tmp/rbenv_vars" put vars, tmp_file execute :cat, tmp_file, ">> ~/.rbenv/vars" execute :rm, tmp_file end end task :run_installer do installer_url = \ "https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer" on release_roles(:all) do with :path => "$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH" do execute :curl, "-fsSL", installer_url, "| bash" end end end task :add_plugins do plugins = %w( sstephenson/rbenv-vars sstephenson/ruby-build rkh/rbenv-update ) plugins.each do |plugin| git_repo = "https://github.com/#{plugin}.git" plugin_dir = "$HOME/.rbenv/plugins/#{plugin.split('/').last}" on release_roles(:all) do unless test("[ -d #{plugin_dir} ]") execute :git, "clone", git_repo, plugin_dir end end end end task :modify_bashrc do on release_roles(:all) do unless test("grep -qs 'rbenv init' ~/.bashrc") template("rbenv_bashrc", "/tmp/rbenvrc") execute :cat, "/tmp/rbenvrc ~/.bashrc > /tmp/bashrc" execute :mv, "/tmp/bashrc ~/.bashrc" execute %q{export PATH="$HOME/.rbenv/bin:$PATH"} execute %q{eval "$(rbenv init -)"} end end end task :compile_ruby do ruby_version = fetch(:atlas_rbenv_ruby_version) on release_roles(:all) do force = ENV["RBENV_FORCE_INSTALL"] || begin ! test("rbenv versions | grep -q '#{ruby_version}'") end if force execute "CFLAGS=-O3 rbenv install --force #{ruby_version}" execute "rbenv global #{ruby_version}" execute "gem install bundler --no-document" end end end task :update_rbenv do on release_roles(:all) do execute "rbenv update" end end end
end