Techioz Blog

Ruby の「gem」コマンドが許可が拒否されました @ rb_sysopen で失敗します

概要

私の「gem」コマンドで何かが壊れているようです。 「gem」を実行して得られるものは次のとおりです

ただし、「sudo gem」を実行するとコマンドは正常に実行されます。

より大きな問題は、新しい gem (fastlane など) をインストールするために「バンドル」を使用できないことです。 Gemfile 経由で gem をインストールするために「バンドル アップデート」を使用していることに注意してください。そして、上に投稿したものとまったく同じスタック トレースで失敗します。

この問題はどうすれば解決できますか?ありがとう!

解決策

sudo を使用せずに実行すると、このエラーが発生します。これは、コンピュータ上で一部の人々が「システム」 Ruby と呼ぶものを使用しているためです。これは、macOS に同梱されているデフォルトの Ruby です。どの Ruby を実行する場合、/usr/bin/ruby を指す可能性が高くなります (rvm、rbenv、または別の Ruby バージョン マネージャーをインストールしていない場合)。

デフォルトでは、システム Ruby (システム gem および Bundler コマンドを含む) は、sudo のインストール先となるファイルの場所を指します。

gem をインストールするために sudo を実行しないことをお勧めします。代わりに、rvm (最も人気のある)、rbenv (これも人気のある選択肢)、または asdf (必要に応じて、Ruby 以外のものも管理できるため、私の推奨バージョン マネージャー) などの Ruby バージョン マネージャーをインストールします。

指示に従って Ruby バージョン マネージャーをインストールすると、より新しいバージョンの Ruby をインストールできるようになります (システム Ruby は 2.3.7、最新のものは 2.6.0)。バージョン マネージャーは、sudo を使用せずに書き込み権限があるパスを指す、gem コマンドとバンドル コマンド用の適切なパスもセットアップします。

Ruby バージョン マネージャーは、システムの Ruby バージョンに依存する可能性のあるシステムの依存関係を妨げないため、ローカル開発には強く推奨されます。また、バージョン マネージャーを使用すると、複数のバージョンの Ruby をインストールし、異なるプロジェクトでそれらを切り替えることができます。