システムワイドにrbenvを入れる
Rubyのいろいろなバージョンを使う際のrbenv、特定ユーザのホームディレクトリ配下に入れる資料は多いのだけれど、システムワイドに入れる資料が少なめであるのと、それをansibleでやる場合にちょっとコツが必要だったりもするのでメモ(VagrantのBox CentOS65やさくらVPSの標準OSで動作確認済。確か「install packages」のコメントアウトを外せばAmazonLinuxでもOKだった気がする)。
「ansibleでやる場合にちょっとコツが必要」というのは、システムワイドにやるために「/etc/profile.d/rbenv.sh」に初期設定を入れていて、全ユーザがログインした際にそれが発動するようにしているものの、(ssh接続でリモートでansibleを実行している場合)sourceとかで再読込しても後続タスクでは有効にはならないので、「/bin/bash -lc "..."」などとして明示的にログインシェルで実行されるする必要がある。
あと、この方法で入れた場合、その後のコマンドでも「sudo rbenv install ...」などとするとやはり上記と同じ状態になるので、rbenvの管理コマンドを使う際などは一回rootになって実行した方がよい。
以下、ansibleのplaybook片だけれども「ansible使わないよ!」という向きはコマンドラインに読み替えて実行するよろし。
vars/development.yml
--- ruby: version: 2.1.6
roles/ruby/tasks/main.yml
--- - name: check rbenv stat: path=/etc/profile.d/rbenv.sh register: rbenv_sh - name: get rbenv git: repo=https://github.com/sstephenson/rbenv.git dest=/usr/local/rbenv when: not rbenv_sh.stat.exists - name: get ruby-build git: repo=https://github.com/sstephenson/ruby-build.git dest=/usr/local/rbenv/plugins/ruby-build when: not rbenv_sh.stat.exists - name: copy global profile for rbenv copy: src=rbenv.sh dest=/etc/profile.d/rbenv.sh when: not rbenv_sh.stat.exists - name: check ruby shell: /bin/bash -lc "rbenv versions | grep {{ ruby.version }}" register: ruby_installed failed_when: ruby_installed.rc not in [0, 1] - name: remove old ruby yum: name={{ item }} state=absent with_items: - ruby - ruby-devel when: ruby_installed|failed - name: install packages yum: name={{ item }} state=present with_items: - openssl - openssl-devel - readline - readline-devel # - gcc # - make # - automake # - autoconf # - curl-devel # - zlib-devel # - httpd-devel # - apr-devel # - apr-util-devel # - sqlite-devel when: ruby_installed|failed # use login shell # see http://qiita.com/FGtatsuro/items/2366c93131c47aef8dfe # see https://github.com/ansible/ansible/issues/4854 - name: install ruby shell: /bin/bash -lc "rbenv install {{ ruby.version }} && rbenv rehash && rbenv global {{ ruby.version }}" when: ruby_installed|failed
roles/ruby/files/rbenv.sh
export RBENV_ROOT=/usr/local/rbenv export PATH=$RBENV_ROOT/bin:$PATH eval "$(rbenv init -)"