我正在运行Ubuntu 10.04,最初安装了Ruby 1.9.1(来自源)。我刚刚决定尝试Ruby 1.9.2和Rails 3,似乎是使用RVM处理多个红宝石安装和宝石的好时机。

RVM已安装并似乎正在工作,我在RVM中安装了Ruby 1.9.2,并将其做出了默认的Ruby。但是,每次我尝试在Ruby 1.9.2下安装宝石时,我都会看到此错误。

mark@Steve-Austins-Penguin:~$ 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/ruby-1.9.2-p0@global  
<snip>

但是,如果正确的安装,Ruby和Gem路径在这里显示为什么Ruby试图将宝石安装到 /home/mark/.gem?所有的变量和路径 env 看起来对,我找不到 .gemrc 我的系统上的任何地方都可能包含冲突路径设置。

所以我想我的问题是什么可能导致RubyGems尝试安装 /home/mark/.gems 而不是RVM设置的正确路径?


回答以下问题:

mark@Steve-Austins-Penguin:~$ echo $PATH
/home/mark/.rvm/gems/ruby-1.9.2-p0/bin:/home/mark/.rvm/gems/ruby-1.9.2-p0@global/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  
mark@Steve-Austins-Penguin:~$ which gem
/home/mark/.rvm/rubies/ruby-1.9.2-p0/bin/gem
mark@Steve-Austins-Penguin:~$ rvm list

rvm rubies

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

mark@Steve-Austins-Penguin:~$ 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
rvm_gemset_separator=@
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/ruby-1.9.2-p0@global
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相关的所有条目。

有帮助吗?

解决方案

跟踪跑步的回溯 gem install -V --backtrace --debug haml (感谢zzzhc),然后仔细研究 /home/mark/.gem 目录我发现那里没有GEMS安装,只有GEMSPEC文件和GEM源文件。本着实验的精神,我删除了 /home/mark/.gem 并跑了 gem install 命令,突然它正在起作用。它已经重新创建了 /home/mark/.gem 包含我刚安装的宝石的宝石。

现在很明显,我在原始问题中误解了错误消息。尝试将宝石安装到 /home/mark/.gem, ,它只是将该目录用作即将安装的新下载宝石的宝石的临时商店。在安装RVM之前,我一直在使用 sudo gem install... 会创造 /home/mark/.gem 具有根本权限的目录。所以 rubygems 没有 sudo 无法访问温度目录以存储Gemspecs并在安装宝石之前流产。啊!

其他提示

另一种方法是进入Ruby版本后键入哪个宝石。你会得到这样的东西 - /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工作正常。

检查第一行 /home/mark/.rvm/rubies/ruby-1.9.2-p0/bin/gem 并看 http://yehudakatz.com/2010/08/24/a-tale-of-abort-abort-traps-traps-rays-always-question-your-assumptions/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top