rvm.ruby
rvm1-ansibleとは?
rvmを使用してRubyのバージョンをインストールおよび管理するためのAnsibleロールです。
なぜrvmを使用するのか?
本番環境では、新しいバージョンのRubyをコンパイルするのに10分以上かかることがあります。つまり、CPUが100%の状態で10分間も使用されるということです。
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のインストールパス(デフォルトは単一ユーザー)
# 注: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をチェックして更新、無効にすると更新されないようにする
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アカウントが必要
}
rvm1_rubiesは ruby-x.x.x
で指定する必要があります。したがって、
_ Ruby 2.2.5が必要な場合は、配列 rvm1_rubies: ['ruby-2.2.5'] を渡してください。_
システム全体のインストール
上記の例では、Rubyがシステム全体に設定されます。rvm1_install_pathで指定されたシステムの場所に書き込む必要があるため、プレイをrootとして実行することが非常に重要です。
ansible_userと同じユーザーへのインストール
この場合、rvm1_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
を内部で使用します。失敗した場合(例:無特権ユーザーになるときにAnsibleが作成する必要がある一時ファイルの権限を設定できませんでした
)、詳細と解決策については https://docs.ansible.com/ansible/latest/user_guide/become.html を参照してください。
Rubyの古いバージョンをアップグレードおよび削除する
Rubyバージョンをアップグレードするための一般的なワークフローは次のとおりです:
- 新しいバージョンをインストール
- アプリケーションロールを実行し、bundle installでgemを再インストール
- 古いバージョンの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で見つけることができますので、評価したい場合はご覧ください。
貢献
バッカー
バッカーになると、私たちの活動を続けるために小額の月額寄付でサポートしてください。
スポンサー
スポンサーになると、あなたのロゴを私たちのGitHubのREADMEに掲載し、あなたのサイトへのリンクを提供します。
ライセンス
MIT
ansible-galaxy install rvm.ruby