rvm.ruby
什么是 rvm1-ansible?
这是一个 Ansible 角色,用于使用 rvm 安装和管理 Ruby 版本。
为什么要使用 rvm?
在生产环境中,它非常有用,因为编译新版本的 Ruby 可能需要超过 10 分钟。这意味着你的 CPU 会持续在 100% 使用率。
rvm 提供了许多操作系统的预编译二进制文件。这意味着你可以在大约 1 分钟内安装 Ruby,即使在慢速微型实例上也是如此。
此角色还会在进行系统范围安装时将 Ruby 二进制文件添加到你的系统路径中。这让你可以像使用常规安装一样访问它们,而不需要使用版本管理器,同时仍然可以享受 rvm 的好处。
安装
$ ansible-galaxy install rvm.ruby
角色变量
以下是你可以配置的默认值列表:
---
# 安装 1 个或多个 Ruby 版本
# 列表中的最后一个 Ruby 将设置为默认 Ruby
rvm1_rubies:
- 'ruby-2.3.1'
# 安装 bundler gem
rvm1_bundler_install: True
# 删除特定版本的 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://keys.openpgp.org'
# autolib 模式,见 https://rvm.io/rvm/autolibs
rvm1_autolib_mode: 3
# 将二进制文件创建符号链接到系统路径
rvm1_symlink: true
示例剧本
---
- 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 权限,因为你将写入 ansible 用户的家目录外部。除此之外,其余与上面的相同,只是你需要提供一个不同的用户账号:
rvm1_install_flags: '--auto-dotfiles --user-install'
rvm1_install_path: '/home/someuser/.rvm'
快速说明 rvm1_user
在某些情况下,你可能希望 rvm 文件夹及其文件由特定用户而不是 root 拥有。只需设置 rvm1_user: 'foo'
,当 Ruby 被安装时,将确保 foo
拥有 rvm 目录。
这将使用 Ansible 的 become
功能。如果出现故障(例如 Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user
),请查看 https://docs.ansible.com/ansible/latest/user_guide/become.html 以获取详细信息和可能的解决方案。
升级和删除旧版本的 Ruby
升级 Ruby 版本的常见工作流程是:
- 安装新版本
- 运行你的应用程序角色,以便 bundle install 重新安装你的 gems
- 删除之前的 Ruby 版本
利用 ansible 的 --extra-vars
只需在剧本命令末尾添加 --extra-vars 'rvm1_delete_ruby=ruby-2.1.0'
,该版本将被删除。
需求
任何受 Ansible 支持且满足 RVM 先决条件 的 Linux/Unix 系统都应有效。
与基于 Debian、Ubuntu 或 Redhat 家族的 Linux 发行版的兼容性正在积极测试中。
此项目的持续集成设置当前涵盖以下平台:
- CentOS 6、7 和 8
- Debian 8、9 和 10
- Ubuntu 14.04、16.04、18.04 和 20.04
Ansible galaxy
如果你想评分,可以在官方 ansible galaxy 上找到它。
贡献
支持者
成为支持者,通过每月小额捐款支持我们,帮助我们继续进行活动。
赞助商
成为赞助商,让你的 logo 出现在我们的 GitHub README 上,并链接到你的网站。
许可证
MIT