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の導入から既に苦戦しています。