Ruby "gem" 命令失败,权限被拒绝@ rb_sysopen

Ruby "gem" command fails with Permission denied @ rb_sysopen

我的 "gem" 命令似乎出了问题。这是我在 运行 "gem"

上得到的

/usr/local/lib/site_ruby/2.3.0/rubygems/stub_specification.rb:114:in initialize': Permission denied @ rb_sysopen - /var/lib/gems/2.3.0/specifications/unicode-display_width-1.4.1.gemspec (Errno::EACCES) from /usr/local/lib/site_ruby/2.3.0/rubygems/stub_specification.rb:114:in open' from /usr/local/lib/site_ruby/2.3.0/rubygems/stub_specification.rb:114:in data' from /usr/local/lib/site_ruby/2.3.0/rubygems/stub_specification.rb:204:in valid?' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:774:in select' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:774:in gemspec_stubs_in' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:798:in block in map_stubs' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:795:ineach' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:795:in flat_map' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:795:in map_stubs' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:788:in installed_stubs' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:826:in stubs' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:747:in _all' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:1131:in latest_specs' from /usr/local/lib/site_ruby/2.3.0/rubygems.rb:546:in find_latest_files' from /usr/local/lib/site_ruby/2.3.0/rubygems.rb:1111:inload_plugins' from /usr/local/lib/site_ruby/2.3.0/rubygems/gem_runner.rb:86:in <top (required)>' from /usr/local/lib/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:54:in require' from /usr/local/lib/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:54:in require' from /usr/bin/gem:9:in'

但是,如果我这样做,命令运行正常 "sudo gem"。

更大的问题是我无法使用 "bundle" 安装新的 gems(例如,fastlane)。请注意,我正在使用 "bundle update" 通过 Gemfile 安装 gem。 失败,堆栈跟踪 与上面发布的完全相同。

我该如何解决这个问题?谢谢!

当您 运行 没有 sudo 时,您会收到此错误,因为您在计算机上使用的是某些人所说的 "system" ruby;它是 macOS 附带的默认值 ruby。如果你 运行 which ruby 它很可能指向 /usr/bin/ruby (如果你还没有安装 rvmrbenv 或另一个 ruby 版本经理。

默认情况下,系统 ruby(包括系统 gembundler 命令)指向需要 sudo 才能安装到的文件位置。

我建议你不要 运行 sudo 来安装 gems;而是安装一个 ruby 版本管理器,例如 rvm (the most popular), rbenv (also a popular choice), or asdf(我的首选版本管理器,因为它管理的不仅仅是 ruby,如果你愿意的话)

按照说明安装 ruby 版本管理器后,您应该能够安装更新版本的 ruby(系统 ruby 是 2.3.7,最新版本是 2.6.0)。版本管理器还将为您的 gembundle 命令设置合理的路径,指向您在不使用 sudo

的情况下具有写入权限的路径

强烈推荐 ruby 版本管理器,因为它不会干扰任何可能依赖系统 ruby 版本的系统依赖项,并且版本管理器允许您安装多个版本ruby 并为不同的项目在它们之间切换。