Ansibleでgem installしても参照できなくて困った時の話を書いておきます.
Playbook
とりあえず以下がPlaybookになります.
--- - hosts: all become: false tasks: - name: Download rbenv git: repo: https://github.com/rbenv/rbenv.git dest: /home/vagrant/.rbenv update: no - name: Download rbenv-build git: repo: https://github.com/sstephenson/ruby-build.git dest: /home/vagrant/.rbenv/plugins/ruby-build update: no - name: Set rbenv environment register: result changed_when: '"Set rbenv environment" in result.stdout' shell: | if [ "$(grep rbenv ${HOME}/.bashrc)" == "" ]; then echo 'Set rbenv environment' echo 'export PATH="${HOME}/.rbenv/shims:${HOME}/.rbenv/bin:${PATH}"' >> ${HOME}/.bashrc fi - name: Install ruby register: ruby_installer_result changed_when: '"Installing ruby" in ruby_installer_result.stdout' shell: | if [ "$(rbenv versions 2>&1 | grep 2.4.1)" == "" ]; then echo 'Installing ruby 2.4.1' ${HOME}/.rbenv/bin/rbenv install 2.4.1 ${HOME}/.rbenv/bin/rbenv global 2.4.1 ${HOME}/.rbenv/bin/rbenv rehash fi - name: Install bundler gem: name: bundler state: present executable: ${HOME}/.rbenv/shims/gem version: 1.15.3 - name: Install rails gem: name: rails state: present executable: ${HOME}/.rbenv/shims/gem version: 5.1.3
余りキレイな書き方ではないのですが、
- ホームディレクトリ配下にrbenvをインストール
- ruby-buildを追加
- rbenv周りの環境変数を.bashrcに追記
- Rubyのインストール
- bundlerのインストール
- railsのインストール
をしています.
このPlaybookを実行しても、bundleやrailsが見つかりません.
gem list
で表示されるにも関わらずです.
--user-install
gem ilist
に出てくるということは、インストール自体はされています.
今の設定で、参照出来なくてインストールされているとなると、可能性が高いのは、--user-installオプションをつけてインストールしているときです.
AnsibleのgemモジュールのOptionsを見てみます.
--user-installに該当するオプションがありますね.
user_installです.
どうやら、デフォルト値がtrueになっているようです.
ということは、これをfalseで指定してあげれば良さそうです.
--- - hosts: all become: false tasks: - name: Download rbenv git: repo: https://github.com/rbenv/rbenv.git dest: /home/vagrant/.rbenv update: no - name: Download rbenv-build git: repo: https://github.com/sstephenson/ruby-build.git dest: /home/vagrant/.rbenv/plugins/ruby-build update: no - name: Set rbenv environment register: result changed_when: '"Set rbenv environment" in result.stdout' shell: | if [ "$(grep rbenv ${HOME}/.bashrc)" == "" ]; then echo 'Set rbenv environment' echo 'export PATH="${HOME}/.rbenv/shims:${HOME}/.rbenv/bin:${PATH}"' >> ${HOME}/.bashrc fi - name: Install ruby register: ruby_installer_result changed_when: '"Installing ruby" in ruby_installer_result.stdout' shell: | if [ "$(rbenv versions 2>&1 | grep 2.4.1)" == "" ]; then echo 'Installing ruby 2.4.1' ${HOME}/.rbenv/bin/rbenv install 2.4.1 ${HOME}/.rbenv/bin/rbenv global 2.4.1 ${HOME}/.rbenv/bin/rbenv rehash fi - name: Install bundler gem: name: bundler state: present executable: ${HOME}/.rbenv/shims/gem user_install: false # 追記 version: 1.15.3 - name: Install rails gem: name: rails state: present executable: ${HOME}/.rbenv/shims/gem user_install: false # 追記 version: 5.1.3
これで期待するところにインストールされるようになりました.