rbenv環境をsudo時にも適用する

Amazon Linuxsinatraを80番ポートで動かそうとsudo rubyしたら、rbenvが適用されてなかったのでメモ。

やり方

echo $PATHsudo bash -c 'echo $PATH'の結果が異なり、sudoの方はどうやら/usr/bin/rubyの方を持ってきているようでした。
調べたところ、sudo時にはsudoersファイルのsecure_pathの値が$PATHとして適用されるらしいです。
もう一つ、env_keepという変数があり、ここに追加された環境変数sudo時に引き継がれるので、RBENV_ROOTを追加すればsudo rbenv installなども動きそうです。

手順としては、

$ sudo visudo

でsudoersファイルを開き、

Defaults    env_keep += "RBENV_ROOT"

env_keepがまとまってるところあたりに追加して、

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/local/rbenv/bin:/usr/local/rbenv/shims:/usr/bin

上のようにsecure_pathのところに/usr/binより前になるようにrbenvのパスを入れれば、rbenvで設定した方のrubyを持ってきてくれます。

参考にさせていただいたサイト

sudo 経由で rbenv を使えるようにする - Qiita
【Linux】CentOS6.5にrbenvをsudoで呼び出せるよう環境構築 | Web活