Closed1

Bundleを使おうとしたらsudoを使えと言われる

ロボ太ロボ太

久しぶりにBundleを使おうとしたら、以下のようなメッセージが表示される。

$ bundle
Using bundler 2.2.24
Using temple 0.8.2
Following files may not be writable, so sudo is needed:
  /opt/rh/rh-ruby27/root/usr/bin
  /opt/rh/rh-ruby27/root/usr/share/gems
  /opt/rh/rh-ruby27/root/usr/share/gems/build_info
  /opt/rh/rh-ruby27/root/usr/share/gems/cache
  /opt/rh/rh-ruby27/root/usr/share/gems/doc
  /opt/rh/rh-ruby27/root/usr/share/gems/extensions
  /opt/rh/rh-ruby27/root/usr/share/gems/gems
  /opt/rh/rh-ruby27/root/usr/share/gems/specifications

いつからか、bunldeの仕様が変わったらしい。これらはbundleのデフォルトのインストール先であり、そこに書き込み権限がないからsudo使ってね、というもの。sudoを使うとシステム全体にインストールされてしまうため、bundleを使う目的から外れてしまう。

これを解決するには、bundleのインストール先を指定してやれば良い。例えば./gemsにするなら、

export GEM_HOME=$HOME/.gem 
bundle config set --local path ~/.gem

とする。これでGemfileがあるところでbundle installすると、以後./gemsにインストールされる。

そこにインストールされたファイルを実行したい場合、PATHを通すか、bundle execで実行するかの二択。パスを通す場合は、例えば

export PATH=$PATH:~/.gem/ruby/2.7.0/bin

などとする必要があるが、バージョン情報などが生で入ってしまっているため、bundle exec経由で実行した方が良さそう。

環境変数GEM_HOMEの設定は.bashrc(.zshrc)にも追加しておくこと。

なお、現状のbundleの設定はbundle configで調べることができる。

$ bundle config
Set for the current user (/home/username/.bundle/config): "/home/username/.gem"
このスクラップは2023/03/15にクローズされました