rbenv应该在系统范围内安装还是在用户级安装?

我正在建立一个流浪汉设置,其中一部分是安装rbenv。 我正在使用图书管理员厨师管理我所有的厨师食谱,并安装了rbenv和ruby-build。

但是,当我尝试ssh到我的Vagrant VM并输入ruby -v我得到了标准的系统安装的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 。 我想让rbenv与厨师一起设置,因为这样可以避免我在安装后手动设置它。

我遇到的另一个问题是,看起来像gem一样受ruby控制的所有东西也会遭受同样的脱节。

 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. 

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

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

编辑

我已经遇到过fnichol的chef-rbenv食谱,如果你真的想安装一个系统范围的rbenv,给出一个正确的方法 ,你可以用Chef自动化它(我推荐刀独奏)。

它将它安装到/etc/profile.d/以便它将为所有用户运行, 将适当的ruby放入PATH

应该在用户级别安装rbenv。

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

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

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

 sudo chown -R yourusername ~/.rbenv 

chown目录之后,您将能够在没有sudo情况下运行gem install

rbenv自述文件中的所有内容都假定~/.rbenv/的本地(每用户)安装,所以我认为官方建议是按用户安装它。

不过,它可以在全球范围内安装。 但是对于需要编写权限的所有命令,您需要sudo 。 安装新的ruby,安装gem*和更改全局ruby版本是我想到的,可能还有更多。

(*)当您通过默认的系统例程(例如apt on debian)安装ruby时,需要安装新gem的sudo是默认的,不需要sudo,这实际上是使用对每个用户有效的ruby版本管理器的一个积极的副作用基础