【问题标题】:Rubygems permission problem when using sudo使用 sudo 时的 Rubygems 权限问题
【发布时间】:2011-09-12 21:30:08
【问题描述】:

我使用sudo 来安装gems 并更新rubygems 本身,但这会导致/usr/lib/ruby/gems/1.8/gems 中的所有新文件都归root:root 所有并拥有750 的权限

这反过来会导致大多数宝石无法加载。

例如,我最近更新了 ruby​​gems,如果我尝试gem env,我会得到:

/usr/local/lib/site_ruby/1.8/rubygems/specification.rb:512:in `read': 权限被拒绝 - /usr/lib/ruby/gems/1.8/specifications/rubygems-update-1.6.2.gemspec (错误::EACCES) 来自 /usr/local/lib/site_ruby/1.8/rubygems/specification.rb:512:in `load' 来自 /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:116:in `load_gems_in' 来自 /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:115:in `each' 来自 /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:115:in `load_gems_in' 来自 /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:112:in `reverse_each' 来自 /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:112:in `load_gems_in' 来自 /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:309:in `refresh!' 来自 /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:67:in `from_gems_in' 来自 /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:47:in `from_installed_gems' 来自 /usr/local/lib/site_ruby/1.8/rubygems.rb:1025:in `source_index' 来自 /usr/local/lib/site_ruby/1.8/rubygems/gem_path_searcher.rb:135:in `init_gemspecs' 来自 /usr/local/lib/site_ruby/1.8/rubygems/gem_path_searcher.rb:14:in `initialize' 来自 /usr/local/lib/site_ruby/1.8/rubygems.rb:984:in `new' 来自 /usr/local/lib/site_ruby/1.8/rubygems.rb:984:in `searcher' 来自 /usr/local/lib/site_ruby/1.8/rubygems.rb:206:in `try_activate' 来自 /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:57:in `require' 来自 /usr/local/lib/site_ruby/1.8/rubygems/config_file.rb:55 来自 /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require' 来自 /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require' 来自 /usr/local/lib/site_ruby/1.8/rubygems/gem_runner.rb:8 来自 /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require' 来自 /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require' 从 /usr/bin/gem:9

当前的解决方法是 chmod 所有人都可以读取所有文件,但这真的很烦人。

一些服务器统计数据:

uname -a给了

Linux HomeBox 2.6.35 28-server #49-Ubuntu SMP Tue Mar 1 14:55:37 UTC 2011 x86_64 GNU/Linux


sudo gem env给了

RubyGems 环境: - 红宝石版本:1.6.2 - 红宝石版本:1.8.7(2010-06-23 补丁级别 299)[x86_64-linux] - 安装目录:/usr/lib/ruby/gems/1.8 - 红宝石可执行文件:/usr/bin/ruby1.8 - 可执行目录:/usr/bin - 红宝石平台: - 红宝石 - x86_64-linux - 宝石路径: - /usr/lib/ruby/gems/1.8 - /home/nicklas/.gem/ruby/1.8 - 宝石配置: - :update_sources => 真 - :详细 => 真 - :基准 => 假 - :回溯 => 假 - :bulk_threshold => 1000 - 远程资源: - http://rubygems.org/


ruby -v给了

ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]

我很乐意提供有关该问题的更多信息。


更新

我刚刚清理了所有 ruby​​ 和 ruby​​gems 的东西并重新安装了它。同样的问题。

【问题讨论】:

  • 如果你使用 RVM,你就不会遇到这个问题。
  • 我使用 aptitude 就像我做其他事情一样。

标签: ruby rubygems


【解决方案1】:

我在家里也用 Ubuntu,在使用 apt 安装遇到很多问题后,我发现了RVM

RVM 安装起来非常简单,可以让您快速轻松地启动和运行。但是一旦你开始使用它一段时间,你会发现它优于任何 OS 包系统,因为它具有允许你:

  • 安装多个版本的 Ruby 和 JRuby 并在它们之间轻松切换。我可以发出rvm use 1.9.2rvm use jruby-1.6.2,然后我的路径会自动切换,一切正常。
  • 将 gem 集安装到“gemset”中,这样​​您就可以在多个 ruby​​ 版本中使用相同的 gem,因此您不必手动重新安装。此外,您可以在 gemset 之间切换,以便隔离实验性 gem 版本等。

我的建议是卸载原生 ruby​​ 包,然后安装 RVM。你会很高兴你这样做了。

【讨论】:

  • 我最终这样做了,rvm 实际上非常好:)
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
相关资源
最近更新 更多