16

我正在构建一个 vagrant 设置,其中一部分是安装 rbenv。我正在使用 librarian-chef 来管理我所有的厨师食谱,它安装了 rbenv 和 ruby​​-build。

但是,当我尝试 ssh 进入我的 Vagrant VM 并键入时,ruby -v我得到了标准的 system-installed ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]。认为可能没有安装 rbenv ,我尝试运行rbenv versions,但实际上安装了 rbenv :

vagrant@precise64:~$ rbenv versions
* system (set by /opt/rbenv/version)

所以我尝试了rbenv install [version]

vagrant@precise64:~$ rbenv install 1.9.3-p327
[...]

BUILD FAILED
[...]

test -z "/opt/rbenv/versions/1.9.3-p327/include" || /bin/mkdir -p "/opt/rbenv/versions/1.9.3-p327/include"
/bin/mkdir: cannot create directory `/opt/rbenv/versions/1.9.3-p327': Permission denied

那失败了Permission denied。我尝试再次安装sudo

sudo rbenv install 1.9.3-p327

这奏效了。然后我rbenv versions再次尝试运行:

vagrant@precise64:~$ rbenv versions
* system (set by /opt/rbenv/version)

但它仍然说只system安装了 ruby​​。但是,如果我运行它sudo

vagrant@precise64:~$ sudo rbenv versions
* system (set by /home/vagrant/.rbenv/version)
  1.9.3-p327

rbenv versions现在显示1.9.3已安装。

所以似乎存在脱节,因为 rbenv 和我的 ruby​​ 版本现在安装在系统级别而不是用户级别。

我正在使用rbenv-cookbook。我想用 chef 设置 rbenv,因为这样可以避免我在安装后手动设置它。

我遇到的另一个问题是,似乎所有受 ruby​​ 控制的东西,例如gem,也都在遭受同样的断开连接。

vagrant@precise64:~$ gem install bundler
Fetching: bundler-1.3.5.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /opt/vagrant_ruby/lib/ruby/gems/1.8 directory.
4

3 回答 3

14

大约两年前,github 上发生了关于共享安装的讨论,这似乎回答了这个问题。

概要: sstephenson(rbenv 作者)特别不喜欢鼓励系统范围的安装,因为权限、写访问等的复杂性。他认为添加强大的支持会使 rbenv 更加复杂,而简单是目标。

编辑

从那以后,我遇到了 fnichol 的 chef-rbenv 食谱,如果你真的想安装一个系统范围的 rbenv,它提供了一个正确和正确的方法,你可以用 Chef 自动化它(我推荐刀独奏)。

它将它安装到/etc/profile.d/它会为所有用户运行,将正确的 ruby​​ 放入PATH.

于 2013-09-01T04:40:00.443 回答
14

rbenv 应该安装在用户级别。

不幸的是,这意味着在运行时gem install,您可能会遇到您看到的问题:

You don't have write permissions into the {...} directory

~/.rbenv您可以通过在目录上设置正确的权限来解决此问题。

sudo chown -R yourusername ~/.rbenv

chowning 目录之后,您将能够在gem install没有sudo.

于 2014-02-18T23:56:49.123 回答
1

rbenv 的自述文件中的所有内容都假设是本地(每个用户)安装,~/.rbenv/所以我假设官方建议是在每个用户的基础上安装它。

尽管如此,还是可以在全球范围内安装它。但是您需要sudo所有需要写入权限的命令。安装新的 rubies、安装 gems* 和更改全局 ruby​​ 版本是我想到的,可能还有更多。

(*) 当您通过默认系统例程(如 debian 上的 apt)安装 ruby​​ 时,默认需要 sudo 来安装新 gem,不需要 sudo 因为它实际上是使用适用于每个用户的 ruby​​ 版本管理器的积极副作用基础

于 2013-08-03T10:48:53.657 回答