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

时间:2013-05-29 13:50:21

标签: ruby rubygems chef vagrant 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,也遭受同样的断开。

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.

3 个答案:

答案 0 :(得分:14)

大约两年前,关于共享安装的discussion happened in github似乎可以回答这个问题。

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

修改

我已经遇到了fnichol的chef-rbenv食谱,如果你真的想要安装一个系统范围的rbenv,它会给right and proper method,你可以用Chef自动化它(我推荐刀独奏)

它会将其安装到/etc/profile.d/,以便所有用户putting the proper ruby into the PATH运行。

答案 1 :(得分:14)

应该在用户级别安装rbenv。

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

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

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

sudo chown -R yourusername ~/.rbenv

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

答案 2 :(得分:1)

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

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

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