我正在建立一个流浪汉设置,其中一部分是安装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.
答案 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版本管理器的一个积极的副作用每用户基础