【问题标题】:RubyGems installation errors both when using 'sudo' and not using sudo使用“sudo”和不使用 sudo 时出现 RubyGems 安装错误
【发布时间】:2010-04-21 16:40:15
【问题描述】:

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

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

通常当我以 root 身份安装 gems 时,它知道将其安装到 /usr/lib/ruby/gems,那么它为什么要检查我的主目录呢?另一个怪癖是当我做gem install rack(不是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 目录的任何想法?

【问题讨论】:

    标签: ruby installation rubygems


    【解决方案1】:

    听起来可能是安装了多个版本的路径问题。

    输出之间的任何差异:

    sudo gem env
    

    gem env
    

    【讨论】:

    • 两者没有区别,但在 GEM PATHS 部分:/usr/lib/ruby/gems/1.8/home/username/.gem/ruby/1.8。 sudo 不应该默认不存在吗?
    • 它们在我的系统上是相同的,但只有在我重新编译 1.9 后,我通过并“清理”了所有内容。我检查的事情: 1. 删除了未使用的 gem 命令(在 /usr/bin 和 /usr/local/bin 中有一个 2. 检查了我的 ~/.gemrc 文件并清理了路径以指向我在 / 中的 gem 路径usr/local/lib. 使用我的 ~/.gem 文件夹作为备份 3. 将我的 GEM_HOME 和 GEM_PATH 环境变量(在 .profile/.bash_profile/.bashrc 中)与 .gemrc 文件匹配 4. 检查 gem 文件夹的权限5. 你也可以检查一下 /etc/gemrc 中是否有任何东西
    • 所以我浏览了这些建议,他们似乎都检查了:1)/usr/bin 中只有一个 gem 可执行文件,2)没有 .gemrc,3)我从未在我的 . profile,4)gem 文件夹具有 root 权限,sudo 应该可以,5)没有 /etc/gemrc。唯一的问题可能是我的主目录位于 AFS 上,这搞砸了?
    • 检查这个:stackoverflow.com/questions/257616/sudo-changes-path-why 也许旧版本的 gem 没有安装在 /usr/bin 或 /usr/local/bin 中,sudo 正在选择一个不同的 PATH 变量(到 gem)还是某个地方的 GEM_PATH (指向您的 /home/username 路径)?您也可以检查 /etc/environment 并尝试找出 sudo 从哪里获取其环境变量(可能是根 .profile?)。
    • 我相信问题是由于我的主目录位于 AFS 上。无论您是否通过 sudo 以 root 身份运行,RubyGems 似乎都会将元数据写入您的 .gem 目录 (~/.gem/specs)。但是以 root 身份运行意味着您的凭据不会保留,并且您无法对 AFS 执行任何操作。我最终使用sudo su 并以root 身份安装东西。它确实安装到/usr/lib/ruby/gems 并将一些元数据写入~/.gem/specs。感谢所有的帮助,我能够大大缩小问题的范围。
    【解决方案2】:

    尝试运行:

    gem environment
    

    并检查 GEM PATH 的值。更多信息http://docs.rubygems.org/read/chapter/10#page31

    【讨论】:

      【解决方案3】:

      我自己在 Fedora 15 上也遇到了同样的问题,所以我使用“--backtrace”选项运行“gem install”以查看发生了什么。

      结果它在 /usr/lib/ruby/site_ruby/1.8/rubygems/doc_manager.rb:203 失败,它试图 chdir 到它之前存储的目录(我正在运行的用户的主目录sudo as)

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

      希望这有助于/解决您的问题。

      【讨论】:

        【解决方案4】:

        su(密码)然后 chmod 755 /usr/lib/ruby/gems/1.8 会更容易

        【讨论】:

        • 在 homedir 或 /usr/local/... 中安装 gem 更安全。不要弄乱系统安装的文件,也不要让库文件夹对每个用户都可写。它会适得其反。
        猜你喜欢
        • 2016-09-13
        • 1970-01-01
        • 2017-12-06
        • 1970-01-01
        • 2011-09-12
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多