簡體   English   中英

Rubygems 使用sudo時的權限問題

[英]Rubygems permission problem when using sudo

我使用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]

我很樂意提供有關該問題的更多信息。


更新

我剛剛清理了所有 ruby 和 rubygems 的東西並重新安裝了它。 同樣的問題。

我也在家里使用 Ubuntu ,在使用 apt 安裝出現許多問題后,我發現了RVM

RVM 安裝起來超級簡單,讓您快速輕松地啟動和運行。 但是一旦您開始使用它一段時間,您會發現它優於任何 OS package 系統,因為它具有允許您:

  • 安裝 Ruby 和 JRuby 的多個版本,並在它們之間輕松切換。 我可以發出rvm use 1.9.2rvm use jruby-1.6.2並且我的路徑會自動切換並且一切正常。
  • 將 gem 集安裝到“gemset”中,這樣您就可以在多個 ruby 版本中使用相同的 gem,因此您不必手動重新安裝。 此外,您可以在 gemset 之間切換,以便隔離實驗性 gem 版本等。

我的建議是卸載本機 ruby package,然后安裝 RVM。 你會很高興你做到了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM