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

时间:2013-07-30 23:56:04

标签: ruby bundler permission-denied

我已经在我的新服务器上安装了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)

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

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

我不明白Bundler有什么问题...为什么不尝试在我想要的地方安装gem(在我的gems local dir中)?

ps:在我的笔记本电脑中,安装了archlinux和默认的ruby 2.0.0软件包,捆绑软件安装用户的宝石时没有问题。

3 个答案:

答案 0 :(得分:22)

我找到了!

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

要解决此问题,我使用以下内容更新了全局rubygems:sudo gem update --system --no-user-install

一切正常!

答案 1 :(得分:9)

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

您可以使用bundle install --path ~/.gem

执行所需操作

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

答案 2 :(得分:5)

根据bundler documentation,可以设置$BUNDLE_PATH$GEM_HOME env变量,使其成为默认的可写地点。

export BUNDLE_PATH=~/.gems

bundle install

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