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

时间:2018-12-24 22:39:50

标签: ruby rubygems bundler

我的“ 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 打开   /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 有效吗?从   /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'   /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:in each'     来自/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'来自   /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 个存根来自   /usr/local/lib/site_ruby/2.3.0/rubygems.rb:546:in /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'   find_latest_files' from /usr/local/lib/site_ruby/2.3.0/rubygems.rb:1111:in load_plugins'     来自/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 要求'   /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”,命令运行正常。

更大的问题是我无法使用“捆绑包”安装新的宝石(例如fastlane)。请注意,我正在使用“捆绑包更新”通过Gemfile安装gem。并且与上面发布的完全相同的堆栈跟踪失败

如何解决此问题?谢谢!

1 个答案:

答案 0 :(得分:1)

在没有sudo的情况下运行时会出现此错误,因为您在计算机上使用的是某些人所说的“系统”红宝石。这是macOS随附的默认红宝石。如果您运行which ruby,则很有可能会指向/usr/bin/ruby(如果尚未安装rvmrbenv或其他ruby版本管理器。

默认情况下,系统红宝石(包括系统gembundler指令)指向需要安装sudo的文件位置。

我建议您不要运行sudo来安装gem;而是安装诸如rvm(最受欢迎),rbenv(也是最受欢迎的选择)或asdf(我首选的版本管理器之类的ruby版本管理器,因为它不仅管理ruby,如果需要的话)

按照说明安装ruby版本管理器后,您应该能够安装较新版本的ruby(系统ruby为2.3.7,最新版本为2.6.0)。版本管理器还将为您的gembundle命令设置合理的路径,指向您具有写特权而无需使用sudo

的路径

强烈建议使用ruby版本管理器,因为它不会干扰任何可能依赖于系统ruby版本的系统依赖关系,并且版本管理器允许您安装多个ruby版本并在不同项目之间切换。 / p>