silverlogic.rvm
rvm1-ansibleとは?
rvmを使用してRubyのバージョンをインストールおよび管理するためのAnsibleの役割です。
なぜrvmを使うべきか?
本番環境では、新しいRubyのバージョンをコンパイルするのに数分かかることがあり、その間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のインストールパス(デフォルトはシングルユーザー)
# 注意:ROOTベースのインストールを行う場合は、
# インストールパスを'/usr/local/rvm'のように設定してください
rvm1_install_path: '~/.rvm'
# インストールフラグを追加または削除
# 注意:ROOTベースのインストールを行う場合は、
# 以下の--user-installフラグを削除してください
rvm1_install_flags: '--auto-dotfiles --user-install'
# 追加のRubyインストールフラグ
rvm1_ruby_install_flags:
# rvmディレクトリの所有者を設定
# 注意:ROOTベースのインストールを行う場合は、
# 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を設定します。rvm1_install_pathで指定されたシステム位置に書き込む必要があるため、通常はrootとしてプレイブックを実行することが重要です。
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フォルダとそのファイルの所有を特定のユーザーにしたいことがあります。その場合は、rvm1_user: 'foo'
と設定すれば、Rubyがインストールされる際に foo
がrvmディレクトリを所有することができます。
Rubyの古いバージョンのアップグレードと削除
Rubyのバージョンをアップグレードする一般的なフローは以下の通りです:
- 新しいバージョンをインストール
- アプリケーションの役割を実行し、bundle installを再インストール
- 前の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