2010-09-02 128 views
3

我運行的是Ubuntu 10.04,最初安裝了ruby 1.9.1(來自源代碼)。我剛剛決定嘗試使用ruby 1.9.2和rails 3,現在似乎是使用rvm處理多個ruby安裝和gemset的好時機。Ubuntu下的rvm上的ruby gems(未能)安裝在錯誤的位置

rvm已安裝並似乎正在工作,我在rvm中安裝了ruby 1.9.2,並將其設爲我的默認ruby。但是,每次我嘗試在ruby 1.9.2下安裝gem時,我都會看到這個錯誤。

[email protected]:~$ gem install haml 
ERROR: While executing gem ... (Errno::EACCES) 
Permission denied - /home/mark/.gem/specs 

gem environment回報:

RubyGems Environment: 
- RUBYGEMS VERSION: 1.3.7 
- RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [x86_64-linux] 
- INSTALLATION DIRECTORY: /home/mark/.rvm/gems/ruby-1.9.2-p0 
- RUBY EXECUTABLE: /home/mark/.rvm/rubies/ruby-1.9.2-p0/bin/ruby 
- EXECUTABLE DIRECTORY: /home/mark/.rvm/gems/ruby-1.9.2-p0/bin 
- RUBYGEMS PLATFORMS: 
- ruby 
- x86_64-linux 
- GEM PATHS: 
- /home/mark/.rvm/gems/ruby-1.9.2-p0 
- /home/mark/.rvm/gems/[email protected] 
<snip> 

但如果正確安裝,紅寶石和寶石路都出現在這裏爲什麼紅寶石試圖寶石安裝到/home/mark/.gemenv所示的所有變量和路徑看起來都是正確的,而且在我的系統中可能包含衝突路徑設置的任何位置找不到.gemrc文件。

所以我想我的問題是什麼可能導致rubygems嘗試安裝到/home/mark/.gems而不是由rvm設置的正確路徑?


在回答以下問題:

[email protected]:~$ echo $PATH 
/home/mark/.rvm/gems/ruby-1.9.2-p0/bin:/home/mark/.rvm/gems/[email protected]/bin:/home/mark/.rvm/rubies/ruby-1.9.2-p0/bin:/home/mark/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 
[email protected]:~$ which gem 
/home/mark/.rvm/rubies/ruby-1.9.2-p0/bin/gem 
[email protected]:~$ rvm list 

rvm rubies 

    ruby-1.8.7-p302 [ x86_64 ] 
=> ruby-1.9.2-p0 [ x86_64 ] 

[email protected]:~$ env 
rvm_gemsets_path=/home/mark/.rvm/gemsets 
MANPATH=:/home/mark/.rvm/man 
rvm_scripts_path=/home/mark/.rvm/scripts 
rvm_bin_path=/home/mark/.rvm/bin 
GEM_HOME=/home/mark/.rvm/gems/ruby-1.9.2-p0 
rvm_patchsets_path=/home/mark/.rvm/patchsets 
SHELL=/bin/bash 
IRBRC=/home/mark/.rvm/rubies/ruby-1.9.2-p0/.irbrc 
rvm_patches_path=/home/mark/.rvm/patches 
MY_RUBY_HOME=/home/mark/.rvm/rubies/ruby-1.9.2-p0 
rvm_selfcontained=1 
USER=mark 
__shell_array_start=0 
rvm_gems_cache_path=/home/mark/.rvm/gems/cache 
rvm_config_path=/home/mark/.rvm/config 
rvm_path=/home/mark/.rvm 
USERNAME=mark 
[email protected] 
rvm_ruby_args= 
rvm_rubies_path=/home/mark/.rvm/rubies 
PWD=/home/mark 
rvm_hooks_path=/home/mark/.rvm/hooks 
rvm_version=1.0.1 
rvm_src_path=/home/mark/.rvm/src 
HOME=/home/mark 
rvm_gems_path=/home/mark/.rvm/gems 
rvm_ruby_string=ruby-1.9.2-p0 
BUNDLE_PATH=/home/mark/.rvm/gems/ruby-1.9.2-p0 
rvm_tmp_path=/home/mark/.rvm/tmp 
LOGNAME=mark 
GEM_PATH=/home/mark/.rvm/gems/ruby-1.9.2-p0:/home/mark/.rvm/gems/[email protected] 
rvm_action=list 
rvm_log_path=/home/mark/.rvm/log 
rvm_interactive=1 
RUBY_VERSION=ruby-1.9.2-p0 
rvm_archives_path=/home/mark/.rvm/archives 
rvm_repo_path=/home/mark/.rvm/repos 
_=/usr/bin/env 

請注意,我編輯了下來,從env響應略 - 只是爲了保持這個貼子在控制之下的尺寸 - 通過刪除所有條目與X,GNOME和SSH相關。

回答

7

跟進運行gem install -V --backtrace --debug haml(感謝zzzhc),並在/home/mark/.gem目錄,我發現左看右看回溯,有安裝在那裏沒有寶石,只是gemspec文件和寶石源文件。本着實驗的精神,我刪除了/home/mark/.gem並重新運行了gem install命令,並突然開始工作。它重新創建了/home/mark/.gem,其中包含我剛安裝的寶石的gemspecs。

現在很明顯,我錯誤地解釋了原始問題中的錯誤信息; rubygems在嘗試安裝寶石到/home/mark/.gem時沒有失敗,它只是簡單地使用該目錄作爲即將安裝的新下載gems的gemspecs的臨時存儲。在安裝rvm之前,我一直在使用sudo gem install...將系統安裝到系統上,這將創建帶有根權限的/home/mark/.gem目錄。所以rubygems運行時沒有sudo無法訪問臨時目錄來存儲gemspecs並且在安裝gem之前正在中止。衛生署!

+0

+1 - 非常感謝這個答案。我被困住了,直到我碰到它。問題解決了! – 2011-03-15 00:03:24

0

檢查/home/mark/.rvm/rubies/ruby-1.9.2-p0/bin/gem第一線,並期待在http://yehudakatz.com/2010/08/24/a-tale-of-abort-traps-or-always-question-your-assumptions/

+0

你能否詳細說明一下?我對該博客的閱讀是,所描述的錯誤是Bundler與rvm之間的交互,更一般地說,稱爲「系統」版本的gem,而不是在rvm下安裝的gem版本。我沒有使用Bundler,更重要的是,我使用的rvm版本是昨天安裝並更新的,根據博客,它已經包含一個修復程序。 – 2010-09-02 18:56:29

1

另一種方式是在進入ruby版本後鍵入哪個gem。你會得到這樣的東西 - /home/username/.rvm/rubies/ruby-1.9.2-p180/bin/gem。現在只需輸入sudo /home/username/.rvm/rubies/ruby-1.9.2-p180/bin/gem install gem_name

指定完整路徑並添加sudo工作正常。