如何使用Ansible在Ubuntu框上安装Ruby 2和Ruby Gems

Sla*_* II 11 ruby ubuntu ansible

我想使用AnsibleUbuntu Server机器配置最新的RubyRuby Gems版本.

我该怎么做呢?

Sla*_* II 18

解决方案#1:使用APT和符号链接

如果可以全局安装Ruby 2.0Ruby Gems(对于所有用户),我建议使用此解决方案.如果您想安装其他版本或将其与其他用户隔离 - 请参阅解决方案#2.

这是一个简单的Ansible playbook,它将为您安装最新的Ruby 2.0Ruby Gems:

Ubuntu 14.04(Trusty Tahr)

- name: Latest version of Ruby is installed
  apt: pkg={{ item }} state=latest
  with_items:
    - ruby2.0
    - ruby2.0-dev

- name: Symlink exists for Ruby 2.0
  file: src=/usr/bin/ruby2.0 dest=/usr/local/bin/ruby state=link

- name: Symlink exists for Ruby Gems 2.0
  file: src=/usr/bin/gem2.0 dest=/usr/local/bin/gem state=link
Run Code Online (Sandbox Code Playgroud)

Ubuntu 13.10(Saucy Salamander)

- name: Latest version of Ruby is installed
  apt: pkg={{ item }} state=latest
  with_items:
    - ruby2.0
    - ruby2.0-dev

- name: Making Ruby 2.0 the default one
  command: update-alternatives --set ruby /usr/bin/ruby2.0

- name: Making Gem 2.0 the default one
  command: update-alternatives --set gem /usr/bin/gem2.0
Run Code Online (Sandbox Code Playgroud)

提供的剧本必须sudo: yes以明显的理由执行.

解决方案#2:使用RVM

RVM正在安装ruby,它是本地用户的宝石.因此,它会导致多用户环境中的问题.在我的用例中由于某种原因它无法正常工作.所以如果可能的话,我建议坚持第一个解决方案.虽然,如果您知道自己在做什么,并了解其中的复杂性,那就是RVM解决方案.

我建议创建一个简单的shell脚本,用RVM安装当前版本的Ruby和Ruby Gems,稍后在配置的机器上调用它.

这是Bash脚本:

#!/usr/bin/env bash

# Checking if RVM is installed
if ! [ -d "~/.rvm" ]; then
    echo "Installing RVM..."
    \curl -sSL https://get.rvm.io | bash -s stable
    source ~/.rvm/scripts/rvm
    echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc
else
    echo "Updating RVM..."
    rvm get stable
fi;

echo -n "RVM version is: "
rvm --version

echo "Installing Ruby..."
rvm install ruby

echo "Making installed Ruby the default one..."
rvm use ruby --default

echo "Installing latest version of Ruby Gems..."
rvm rubygems current
Run Code Online (Sandbox Code Playgroud)

这个脚本将安装RVM(或者如果它已经安装,则将其更新为最新的稳定版本),它将安装最新的稳定版本的RubyRuby Gems.

这是将提供的脚本复制到配置机器并调用它的剧本:

- file: path=~/provision/ruby state=directory
- copy: src=../../files/ruby/install.sh dest=~/provision/ruby/install.sh mode=775

- name: Latest Ruby is installed
  shell: /usr/bin/env bash ~/provision/ruby/install.sh
Run Code Online (Sandbox Code Playgroud)

只需将脚本放在Ansible的剧本附近并更新路径即可.

我希望它能帮助别人.