我想使用 Ansible 为 Ubuntu Server 计算机配置最新的 Ruby 和 Ruby Gems 版本。
我该怎么做?
答案 0 :(得分:18)
如果可以全局安装 Ruby 2.0 和 Ruby Gems (对于所有用户),我建议使用此解决方案。如果您想安装其他版本或将其与其他用户隔离 - 请参阅解决方案#2。
这是一个简单的 Ansible 手册,将为您安装最新的 Ruby 2.0 和 Ruby Gems :
- 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
- 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
执行剧本。
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 }