首页 文章

使用sudo时Rubygems权限问题

提问于
浏览
1

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

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

例如,我最近更新了rubygems,如果我尝试 gem env ,我得到:

/usr/local/lib/site_ruby/1.8/rubygems/specification.rb:512:in `read': Permission denied - /usr/lib/ruby/gems/1.8/specifications/rubygems-update-1.6.2.gemspec (Errno::EACCES)
    from /usr/local/lib/site_ruby/1.8/rubygems/specification.rb:512:in `load'
    from /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:116:in `load_gems_in'
    from /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:115:in `each'
    from /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:115:in `load_gems_in'
    from /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:112:in `reverse_each'
    from /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:112:in `load_gems_in'
    from /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:309:in `refresh!'
    from /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:67:in `from_gems_in'
    from /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb:47:in `from_installed_gems'
    from /usr/local/lib/site_ruby/1.8/rubygems.rb:1025:in `source_index'
    from /usr/local/lib/site_ruby/1.8/rubygems/gem_path_searcher.rb:135:in `init_gemspecs'
    from /usr/local/lib/site_ruby/1.8/rubygems/gem_path_searcher.rb:14:in `initialize'
    from /usr/local/lib/site_ruby/1.8/rubygems.rb:984:in `new'
    from /usr/local/lib/site_ruby/1.8/rubygems.rb:984:in `searcher'
    from /usr/local/lib/site_ruby/1.8/rubygems.rb:206:in `try_activate'
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:57:in `require'
    from /usr/local/lib/site_ruby/1.8/rubygems/config_file.rb:55
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /usr/local/lib/site_ruby/1.8/rubygems/gem_runner.rb:8
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /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 Environment:
  - RUBYGEMS VERSION: 1.6.2
  - RUBY VERSION: 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/bin/ruby1.8
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/1.8
     - /home/nicklas/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

ruby -v 给出

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

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


更新

我刚清理掉所有红宝石和rubygems东西并重新安装它 . 同样的问题 .

1 回答

  • 1

    我也在家里使用Ubuntu,在使用apt安装的许多问题之后,我发现了RVM .

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

    • 安装多个版本的Ruby和JRuby,并在它们之间轻松切换 . 我可以发出 rvm use 1.9.2rvm use jruby-1.6.2 ,我的路径会自动切换,并且可以正常工作 .

    • 将多组宝石安装到"gemsets"中,允许您在多个ruby版本中使用相同的宝石,因此您无需手动重新安装 . 此外,您可以在宝石集之间切换,以便您可以隔离实验宝石版本等 .

    我的建议是卸载本机ruby包,然后安装RVM . 你会很高兴的 .

相关问题