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

The*_*end 15 ruby rubygems chef-infra vagrant rbenv

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

但是,当我尝试ssh到我的Vagrant虚拟机和类型时,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)
Run Code Online (Sandbox Code Playgroud)

那么我试过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
Run Code Online (Sandbox Code Playgroud)

失败了Permission denied.我尝试再次安装sudo:

sudo rbenv install 1.9.3-p327
Run Code Online (Sandbox Code Playgroud)

这很有效.然后我rbenv versions再次尝试跑步:

vagrant@precise64:~$ rbenv versions
* system (set by /opt/rbenv/version)
Run Code Online (Sandbox Code Playgroud)

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

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

rbenv versions现在显示1.9.3已安装.

因此似乎存在断开连接,因为rbenv和我的ruby版本现在安装在系统级别而不是用户级别.

我正在使用rbenv-cookbook.我想让rbenv与厨师一起设置,因为这样可以避免我在安装后手动设置它.

我遇到的另一个问题是看起来像红宝石控制的所有东西,例如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.
Run Code Online (Sandbox Code Playgroud)

Duk*_*uke 14

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

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

编辑

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

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


use*_*951 14

应该在用户级别安装rbenv.

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

You don't have write permissions into the {...} directory
Run Code Online (Sandbox Code Playgroud)

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

sudo chown -R yourusername ~/.rbenv
Run Code Online (Sandbox Code Playgroud)

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