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

时间:2014-05-06 11:52:04

标签: ruby ubuntu ansible

我想使用 Ansible Ubuntu Server 计算机配置最新的 Ruby Ruby Gems 版本。

我该怎么做?

2 个答案:

答案 0 :(得分:18)

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

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

这是一个简单的 Ansible 手册,将为您安装最新的 Ruby 2.0 Ruby 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

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

由于显而易见的原因,必须使用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

此脚本将安装 RVM (或者如果已安装,则将其更新为最新的稳定版本),它将安装 Ruby 的最新稳定版本和 Ruby 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

只需将脚本放在Ansible的剧本附近,然后更新路径。

我希望它会帮助别人。

答案 1 :(得分:1)

现在有一个官方的Ruby / RVM剧本:https://github.com/rvm/rvm1-ansible

安装:ansible-galaxy install rvm_io.rvm1-ruby -p ROLES_PATH

示例剧本:

---

- name: Configure servers with ruby support
  hosts: all
  roles:
    - { role: rvm_io.rvm1-ruby, tags: ruby, become: True }