Ubuntu 上 rvm 下的 ruby​​ gems(未能)安装在错误的位置

标签 ruby rubygems rvm

我正在运行 Ubuntu 10.04 并且最初安装了 ruby​​ 1.9.1(来自源代码)。我刚刚决定试用 ruby​​ 1.9.2 和 rails 3,现在似乎是使用 rvm 处理多个 ruby​​ 安装和 gemsets 的好时机。

rvm 已安装并且似乎可以正常工作,我在 rvm 中安装了 ruby​​ 1.9.2 并将其设为我的默认 ruby​​。但是,每次我尝试在 ruby​​ 1.9.2 下安装 gem 时,我都会看到此错误。

mark@Steve-Austins-Penguin:~$ gem install haml  
ERROR:  While executing gem ... (Errno::EACCES)  
Permission denied - /home/mark/.gem/specs

gem 环境 返回:

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​​ 试图将 gems 安装到 /home/mark/.gemenv 显示的所有变量和路径看起来都是正确的,而且我在我的系统上的任何地方都找不到可能包含冲突路径设置的 .gemrc 文件。

所以我想我的问题是什么可能导致 ruby​​gems 尝试安装到 /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

请注意,我已经通过删除所有与 X、GNOME 和 SSH 相关的条目,稍微编辑了来自 env 的响应 - 只是为了控制这篇文章的大小。

最佳答案

跟踪运行 gem install -V --backtrace --debug haml 的回溯(感谢 zzzhc)并仔细查看 /home/mark/.gem 目录我发现那里没有安装gems,只有gemspec文件和gem源文件。本着实验的精神,我删除了 /home/mark/.gem 并重新运行了 gem install 命令,突然它开始工作了。并且它重新创建了 /home/mark/.gem,其中包含我刚刚安装的 gem 的 gemspecs。

现在很明显我误解了原始问题中的错误消息; rubygems 在尝试将 gems 安装到 /home/mark/.gem 时并没有失败,它只是将该目录用作临时存储即将安装的新下载的 gems 的 gemspec。在安装 rvm 之前,我一直在使用 sudo gem install... 将 gems 安装到系统上,这将创建具有 root 权限的 /home/mark/.gem 目录。所以 rubygems 在没有 sudo 的情况下运行无法访问临时目录来存储 gemspecs,并且在安装 gems 之前就中止了。呸!

关于Ubuntu 上 rvm 下的 ruby​​ gems(未能)安装在错误的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626701/

相关文章:

ruby - 如何获取对 div#login 中表单的引用?

ruby - 如何在运行 10.6 的 Macbook Pro i7 上修复此 RVM 错误

ruby - 安装指南针成功,但无法访问

ruby - ruby-1.9.2 和 ruby​​ 1.9.2-mri 与 rvm 的区别

ruby-on-rails - bundle 安装和 RVM

ruby-on-rails - FactoryBot 未定义方法错误

ruby-on-rails - 如何使用rails 4通过localhost发送邮件?

ruby-on-rails - 确保 `gem install pg -v ' 0.18。 4'` 捆绑前成功

macos - 在 OS X 上编译 fsevent 时未找到 stdio.h

ruby-on-rails - 运行 rspec 时“无法在任何来源中找到 pg-0.12.2”