chefでrbenvを入れたがrubyのバージョンが変らなかった

投稿者: | 2016年8月22日

chefでrbenvを入れたのですがrubyのバージョンが変更されませんでした。
正確にはchef経由でバージョンを確認した際にsystemのバージョンのままだったということです。
rootやec2-userでログインした場合はrbenvで設定したバージョンになりました。
ちなみに環境はAmazonLinuxです。
原因は何かというと、rootにsudoした際にrbenvが読み込まれていないということです。
chefはrootにsudoして実行するため、rootでログインした際と違う挙動を行います。
下記のようにrootにログインしたときとsudoしたときでrubyのバージョンを確認してみました。

[ec2-user@ip-172-17-201-157 ~]$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
[ec2-user@ip-172-17-201-157 ~]$ sudo su -
Last login: Fri Jul  8 00:23:18 UTC 2016 on pts/0
[root@ip-172-17-201-157 ~]# ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
[root@ip-172-17-201-157 ~]# exit
logout
[ec2-user@ip-172-17-201-157 ~]$ sudo ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]

ec2-user、rootにログインしたときはバージョンが2.3になり、
rootにsudoしたときはバージョンが2.0となりました。
rbenvを入れた際にprofile.dにrbenvのパスを環境変数に設定するよう記述しました。
しかしこれだけだとログイン時には環境変数の設定は行うもののsudoした際は設定がされません。
解決方法としてsudoの設定を変更しました。

$ visudo
#変更前
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
#変更後
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/bin:/usr/local/rbenv/shims

この後、もう一度chef経由でバージョンを確認したところうまく切り替わっていました。
chefでrubyのバージョンをコントールするのは少し手間が必要そうです。
chefを使用するときは現行だとruby2.0がインストールされますのでやや古い感じです。
現在Redmineの環境をchefで作成していますがrubyの導入から既に苦戦しています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA