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:in
each'
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:in
load_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
(如果你还没有安装 rvm
、rbenv
或另一个 ruby 版本经理。
默认情况下,系统 ruby(包括系统 gem
和 bundler
命令)指向需要 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)。版本管理器还将为您的 gem
和 bundle
命令设置合理的路径,指向您在不使用 sudo
的情况下具有写入权限的路径
强烈推荐 ruby 版本管理器,因为它不会干扰任何可能依赖系统 ruby 版本的系统依赖项,并且版本管理器允许您安装多个版本ruby 并为不同的项目在它们之间切换。
我的 "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:indata' 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:inselect' 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:inblock in map_stubs' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:795:in
each' from /usr/local/lib/site_ruby/2.3.0/rubygems/specification.rb:795:inflat_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:ininstalled_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:infind_latest_files' from /usr/local/lib/site_ruby/2.3.0/rubygems.rb:1111:in
load_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:inrequire' 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
(如果你还没有安装 rvm
、rbenv
或另一个 ruby 版本经理。
默认情况下,系统 ruby(包括系统 gem
和 bundler
命令)指向需要 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)。版本管理器还将为您的 gem
和 bundle
命令设置合理的路径,指向您在不使用 sudo
强烈推荐 ruby 版本管理器,因为它不会干扰任何可能依赖系统 ruby 版本的系统依赖项,并且版本管理器允许您安装多个版本ruby 并为不同的项目在它们之间切换。