2010-04-21 57 views
5

我有一台运行Ubuntu Hardy的机器,它提供了自己的RubyGems软件包。不幸的是,RubyGems(1.1.1)的版本太旧,无法做任何有用的工作,所以我决定手动将RubyGems更新为当前版本(1.3.6)。这部分进展顺利,如果我做gem -v,我得到1.3.6这是预期的。问题是,当我尝试这样做:sudo gem install rack,它返回此错误:使用'sudo'而不使用sudo时RubyGems安装错误

ERROR: While executing gem ... (Errno::EACCES) 
Permission denied - /home/username/.gem 

通常当我安装宝石为根,它知道它安装到/usr/lib/ruby/gems,那么,为什么它在所有检查我的主目录?另一个怪癖是,当我做​​(不是root),它说:

ERROR: While executing gem ... (Gem::FilePermissionError) 
You don't have write permissions into the /usr/lib/ruby/gems/1.8 directory. 

这是我希望它去。我已经尝试清除source_caches,尝试不同版本的RubyGems(1.3.5),强制安装到/usr/lib-i无济于事。关于为什么RubyGems坚持以root身份安装时检查我的/home目录的任何想法?

回答

2

听起来像它可能是一个路径问题,再加上安装了多个版本。

不限于输出之间的差值:

sudo gem env 

gem env 
+0

尽管在GEM PATHS部分:'/ usr/lib/ruby​​/gems/1.8'和'/ home/username/.gem/ruby​​/1.8',两者没有什么区别。那不应该在sudo中默认存在吗? – 2010-04-22 22:12:52

+0

他们在我的系统上是一样的,但是只有在我重新编译1.9之后,经过并“擦掉”了所有内容后。我检查过的东西: 1.删除了未使用的gem命令(在/ usr/bin和/ usr/local/bin中有一个命令)2.检查了我的〜/ .gemrc文件并清理了指向我的宝石的路径在/ usr/local/lib中使用路径。使用我的〜/ .gem文件夹作为备份。 3.使用.gemrc文件将我的GEM_HOME和GEM_PATH环境变量(在.profile/.bash_profile/.bashrc中)匹配为 。在gem文件夹上检查权限 5.您也可以检查/ etc/gemrc中是否有任何内容 – SundayEdition 2010-04-23 04:12:17

+0

因此,我检查了这些建议,他们似乎都注意到:1)/ usr/bin中只有一个gem可执行文件,2)没有.gemrc,3)我从来没有在我的.profile中设置这些变量,4)gem文件夹对root有权限,sudo应该可以,5)no/etc/gemrc。唯一的其他问题可能是我的主目录存在于AFS的事实上? – 2010-04-23 15:52:26

-3

的woulda容易SU(密码),然后搭配chmod 755 /usr/lib/ruby/gems/1.8

+1

在您的homedir或/ usr/local/....中安装gem会更安全。不要混淆系统安装的文件,也不要将库文件夹写入每个用户。它会适得其反。 – Munhitsu 2012-04-30 21:00:06

0

我在Fedora 15上运行同样的问题我自己,所以我跑了“宝石安装'与'--backtrace'选项来看看发生了什么事情。

事实证明,它在/usr/lib/ruby/site_ruby/1.8/rubygems/doc_manager.rb:203失败,在那里它试图chdir到它以前存储的目录(用户的主目录是运行sudo)

我没有广泛调试,看看究其根本原因是什么,只是使用了一个快速的解决方法,所以我可以继续前进。解决方法是在运行gem install命令之前简单地cd到根目录,例如cd/

希望这可以帮助/解决您的问题。