`bundle install` 由于权限被拒绝而失败

Posted

技术标签:

【中文标题】`bundle install` 由于权限被拒绝而失败【英文标题】:`bundle install` failed due to permission denied 【发布时间】:2013-07-31 07:58:46 【问题描述】:

我在我的新服务器上安装了 bundler gem,当我尝试执行 bundle install 时,它失败并出现以下错误:

Unfortunately, a fatal error has occurred. Please see the Bundler troubleshooting documentation at http://bit.ly/bundler-issues. Thanks!
/usr/lib/ruby/1.9.1/fileutils.rb:247:in `mkdir': Permission denied - /var/lib/gems (Errno::EACCES)

我的服务器是安装了默认 ruby​​ 1.9.3 软件包的 Debian wheezy (7.1)。我已经像这样配置了/etc/gemrcgem: --user-install 以允许用户在本地安装 gem。

捆绑器 gem 安装在我的用户的 gem 目录 ~/.gem 中,就像我想使用这个命令一样:gem install bundler(没有 sudo)。但是捆绑者希望将 gems 安装到 /var/lib/gems 而不是我的 gems 目录:(

我不明白 bundler 有什么问题...为什么它不尝试将 gem 安装到我想要的位置(在我的 gems 本地目录中)?

ps:在我的笔记本电脑上,安装了 archlinux 和默认的 ruby​​ 2.0.0 包,我使用 bundler 安装用户的 gem 没有问题。

【问题讨论】:

你使用的是 ruby​​ 版本管理器吗? 不...我尝试使用 rbenv 得到相同的结果,但我已将其删除。 【参考方案1】:

我找到了!

我已经像这样gem update --system 更新了我的 ruby​​gem。但是由于我的/etc/.gemrc 中的gem: --user-install 限制,只有我的本地宝石被更新。当 bundler 工作时,它使用全局 ruby​​gem 而不是我的。

为了解决这个问题,我将全局 ruby​​gems 更新为:sudo gem update --system --no-user-install

一切正常!

【讨论】:

【参考方案2】:

根据bundler documentation,可以设置$BUNDLE_PATH$GEM_HOME环境变量,使其成为默认的可写位置。

export BUNDLE_PATH=~/.gems

bundle install

如果您没有/不想使用 root 访问权限,这非常方便。

【讨论】:

您在捆绑器文档中的哪里找到的?【参考方案3】:

bundle install 不使用 gemrc 设置。 (虽然possibly that has changed 在最近的更新中,但更新似乎只加载~/.gemrc,而不是/etc/gemrc)

你可以用bundle install --path ~/.gem做你想做的事

但是,我强烈建议让 rbenv 或 RVM 工作。您说您与 rbenv 有“相同的结果”。如果您在安装 rbenv 时尝试将 gem 安装到 /var/lib/gems,那么运行该命令的不是安装了 rbenv 的 Ruby。要么 rbenv 仍在使用系统 Ruby(直到你选择一个安装了 rbenv 的 Ruby 成为默认系统),或者你没有正确运行 rbenv。

【讨论】:

你说得对! Bundler 在配置良好的 rbenv 下工作正常。我的问题接缝是由于我的~/.profile 在我登录时负载严重。我必须使用source ~/.profile 显式加载它。我会将 rbenv 移至 .bashrc。谢谢 !!! ;)

以上是关于`bundle install` 由于权限被拒绝而失败的主要内容,如果未能解决你的问题,请参考以下文章

错误:由于环境错误而无法安装软件包:[Errno 13] 权限被拒绝:我如何解决? [关闭]

pod install mkdir 权限被拒绝

由于不符合所有文件访问权限政策,Google Play 商店不断被拒绝

npm install 权限被拒绝 /.npm/_cacache/

由于权限处理程序,应用程序被 Google Play 商店拒绝

bower install 给我 EACCES 失败:权限被拒绝错误