silverlogic.rvm
什么是 rvm1-ansible?
它是一个 Ansible 角色,用于使用 rvm 安装和管理 ruby 版本。
为什么要使用 rvm?
在生产环境中,编译新的 ruby 版本可能会花费超过 10 分钟。这样,你的 CPU 将会一直处于 100% 的高负载状态。
rvm 为许多操作系统提供了预编译的二进制文件。这意味着,即使在较慢的微型实例上,你也可以在大约 1 分钟内安装 ruby。
这个角色还会在进行系统范围安装时,将 ruby 的二进制文件添加到你的系统路径中。这意味着你可以像不使用版本管理器一样访问它们,同时仍然可以利用 rvm 所提供的好处。
安装
$ ansible-galaxy install rvm.ruby
角色变量
以下是你可以配置的默认值列表:
---
# 安装 1 个或多个 ruby 版本
# 最后列出的 ruby 版本将被设置为默认版本
rvm1_rubies:
- 'ruby-2.3.1'
# 安装 bundler gem
rvm1_bundler_install: True
# Bundler 版本 - 如果为空则使用最新版本
rvm1_bundler_version: ''
rvm1_bundler_install_command: '{{ rvm1_bundler_version | ternary("gem install -v {{ rvm1_bundler_version }} bundler", "gem install bundler") }}'
# 删除特定版本的 ruby(例如 ruby-2.1.0)
rvm1_delete_ruby:
# rvm 的安装路径(默认是单用户)
# 注意:如果你正在进行根目录安装,确保将安装路径设置为 '/usr/local/rvm'
rvm1_install_path: '~/.rvm'
# 添加或移除任何安装标志
# 注意:如果你在进行根目录安装,请确保移除下面的 --user-install 标志
rvm1_install_flags: '--auto-dotfiles --user-install'
# 添加额外的 ruby 安装标志
rvm1_ruby_install_flags:
# 设置 rvm 目录的所有者
# 注意:如果你在进行根目录安装,请确保将 rvm1_user 设置为 'root'
rvm1_user: 'ubuntu'
# 最新安装脚本的 URL
rvm1_rvm_latest_installer: 'https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer'
# 使用的 rvm 版本
rvm1_rvm_version: 'stable'
# 检查并更新 rvm,禁用此选项将强制 rvm 永不更新
rvm1_rvm_check_for_updates: True
# GPG 密钥验证,如果要跳过此步骤可以使用空字符串
# 注意:除非你知道自己在做什么,否则保持现状
# 身份验证: https://keybase.io/mpapis
# PGP 信息: https://rvm.io/mpapis.asc
rvm1_gpg_keys: '409B6B1796C275462A1703113804BB82D39DC0E3'
# GPG 密钥服务器
rvm1_gpg_key_server: 'hkp://pool.sks-keyservers.net'
# autolib 模式,请参见 https://rvm.io/rvm/autolibs
rvm1_autolib_mode: 3
示例剧本
---
- name: 为单用户配置带有 ruby 支持的服务器
hosts: all
roles:
- { role: rvm.ruby,
tags: ruby,
rvm1_rubies: ['ruby-2.3.1'],
rvm1_user: 'ubuntu'
}
如果你需要传递一个 ruby 版本列表,请以数组的形式进行传递,如下所示。
---
- name: 为系统范围配置带有 ruby 支持的服务器
hosts: all
roles:
- { role: rvm.ruby,
tags: ruby,
become: yes,
rvm1_rubies: ['ruby-2.2.5','ruby-2.3.1'],
rvm1_install_flags: '--auto-dotfiles', # 从默认中移除 --user-install
rvm1_install_path: /usr/local/rvm, # 设置为系统位置
rvm1_user: root # 需要 root 账户访问系统位置
}
rvm_rubies 必须通过 ruby-x.x.x
进行指定,所以如果你想
安装 ruby 2.2.5,需要传入数组 rvm_rubies: ['ruby-2.2.5']
系统范围安装
上述示例将设置系统范围的 ruby。非常重要的一点是,你必须以 root 身份运行剧本,因为它需要写入由 rvm1_install_path 指定的系统位置。
与 ansible_user
相同的用户
在这种情况下,只需覆盖 rvm_install_path
,默认情况下将设置 --user-install
标志:
rvm1_install_flags: '--auto-dotfiles --user-install'
rvm1_install_path: '/home/{{ ansible_user }}/.rvm'
对于不是 ansible_user
的用户
在这里你 需要 root 权限,因为你将写入安静用户的主目录之外。除此之外,设置方式与上面相同,只需提供不同的用户账户:
rvm1_install_flags: '--auto-dotfiles --user-install'
rvm1_install_path: '/home/someuser/.rvm'
关于 rvm1_user
的简要说明
在某些情况下,你可能希望 rvm 文件夹及其文件由特定用户而不是 root 拥有。只需设置 rvm1_user: 'foo'
,安装 ruby 时将确保 foo
拥有 rvm 目录。
升级和删除旧版本的 ruby
升级 ruby 版本的常见工作流程如下:
- 安装新版本
- 运行你的应用程序角色,以便 bundle install 重新安装你的 gems
- 删除之前的 ruby 版本
利用 ansible 的 --extra-vars
只需在剧本命令的末尾添加 --extra-vars 'rvm1_delete_ruby=ruby-2.1.0'
,该版本将被删除。
要求
- 在 CentOS 6 和 7 上测试
- 在 Debian 8 和 9 上测试
- 在 Ubuntu 14.04 和 16.04 上测试
Ansible galaxy
如果你想评价,可以在官方的 ansible galaxy 上找到它。
贡献
支持者
成为支持者,通过每月的小额捐款支持我们继续活动。
赞助商
成为赞助商,在我们的 GitHub README 上显示你的标志,并提供指向你网站的链接。
许可证
MIT
ansible-galaxy install silverlogic.rvm