我在ubuntu 12.04上安装了rvm system wide:
$ \curl -L https://get.rvm.io | sudo bash -s stable
到目前为止,我总是执行单用户安装,老实说,我对系统范围安装的结果感到相当困惑。
它确实将rvm bin目录放在了我的路径中,但是它用符号链接了所有具有不能直接使用的名称的二进制文件。
这是否意味着我应该一个接一个地对它们进行符号链接?
是不是出了什么问题?
这就是defalt行为吗?
appusr@server-name:/usr/local/rvm/bin$ ll
total 60
drwxrwsr-x 2 root rvm 4096 Apr 5 13:11 ./
drwxrwsr-x 23 root rvm 4096 Apr 5 13:04 ../
-rwxrwxr-x 1 root rvm 578 Apr 5 13:04 bundle*
lrwxrwxrwx 1 appusr rvm 41 Apr 5 13:11 erb-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/erb*
lrwxrwxrwx 1 appusr rvm 48 Apr 5 13:11 erb-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/erb*
lrwxrwxrwx 1 appusr rvm 41 Apr 5 13:11 gem-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/gem*
lrwxrwxrwx 1 appusr rvm 48 Apr 5 13:11 gem-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/gem*
lrwxrwxrwx 1 appusr rvm 41 Apr 5 13:11 irb-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/irb*
lrwxrwxrwx 1 appusr rvm 48 Apr 5 13:11 irb-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/irb*
-rwxrwxr-x 1 root rvm 556 Apr 5 13:04 rake*
lrwxrwxrwx 1 appusr rvm 42 Apr 5 13:11 rake-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/rake*
lrwxrwxrwx 1 appusr rvm 49 Apr 5 13:11 rake-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/rake*
lrwxrwxrwx 1 appusr rvm 42 Apr 5 13:11 rdoc-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/rdoc*
lrwxrwxrwx 1 appusr rvm 49 Apr 5 13:11 rdoc-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/rdoc*
lrwxrwxrwx 1 appusr rvm 40 Apr 5 13:11 ri-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/ri*
lrwxrwxrwx 1 appusr rvm 47 Apr 5 13:11 ri-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/ri*
lrwxrwxrwx 1 appusr rvm 42 Apr 5 13:11 ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/ruby*
lrwxrwxrwx 1 appusr rvm 49 Apr 5 13:11 ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/ruby*
-rwxrwxr-x 1 root rvm 1307 Apr 5 13:04 rvm*
-rwxrwxr-x 1 root rvm 1512 Apr 5 13:04 rvm-auto-ruby*
-rwxrwxr-x 1 root rvm 1803 Apr 5 13:04 rvm-exec*
-rwxrwxr-x 1 root rvm 13130 Apr 5 13:04 rvm-installer*
-rwxrwxr-x 1 root rvm 3850 Apr 5 13:04 rvm-prompt*
-rwxrwxr-x 1 root rvm 2263 Apr 5 13:04 rvm-shell*
-rwxrwxr-x 1 root rvm 648 Apr 5 13:04 rvm-smile*
-rwxrwxr-x 1 root rvm 2229 Apr 5 13:04 rvmsudo*
lrwxrwxrwx 1 appusr rvm 44 Apr 5 13:11 testrb-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/testrb*
lrwxrwxrwx 1 appusr rvm 51 Apr 5 13:11 testrb-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/testrb*
appusr@server-name:/usr/local/rvm/bin$
appusr@server-name:/usr/local/rvm/bin$
appusr@server-name:/usr/local/rvm/bin$
appusr@server-name:/usr/local/rvm/bin$ which ruby
appusr@server-name:/usr/local/rvm/bin$ which irb
appusr@server-name:/usr/local/rvm/bin$ which gem
appusr@server-name:/usr/local/rvm/bin$ /usr/bin/env ruby -v
/usr/bin/env: ruby: No such file or directory
appusr@server-name:/usr/local/rvm/bin$ ruby -v
The program 'ruby' can be found in the following packages:
* ruby1.8
* ruby1.9.1
Ask your administrator to install one of them
appusr@server-name:/usr/local/rvm/bin$发布于 2013-04-06 22:52:14
我想我找到问题所在了。显然,rvm没有作为一个函数正确加载,也就是说
$ type rvm | head -n 1
没有返回"rvm is a function",而是类似于"rvm is hashed“(...?...)。
同样有趣的是,问题并不局限于系统范围的安装。我内爆了系统范围的rvm安装,删除了/etc中的引用,并在没有sudo的情况下重新安装了它……同样的问题。
我会说这是我的错,我的意思是我不知道bash是如何处理一些用户切换的。它可能对其他人也有用,所以我将报告我所做的事情。
我以普通用户的身份进入服务器,然后切换到将运行rails堆栈的用户:su appusr (使用bash)。
在此之后,我使用以下命令安装了rvm:
$ \curl -L https://get.rvm.io | bash -s stable
当然,当我尝试系统范围安装时,我还使用以下命令将用户添加到rvm组:
$ sudo usermod -a -G rvm appusr
...and注销并再次登录:exit,然后再次登录su appusr。
现在看来,通过这样做,bash只是获取了~/.bashrc,而不是~/.bash_profile,而不是rvm将语句作为函数加载rvm的地方:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
尽管如此,Ruby二进制文件在我的路径中,我可以发出安装rvm所需的命令。
到现在为止还好。
问题是在安装之后,它不知何故没有选择我安装的only ruby作为默认解释器,所以它没有创建符号链接。
我之所以注意到这一点,是因为当我发出rvm list命令时,我得到的提示是:
rvm rubies
ruby-2.0.0-p0 [ x86_64 ]
# => - current
# =* - current && default
# * - default..。注意它是如何用标记的,而不是用=*标记的。
我使用了命令rvm use ruby-2.0.0-p0 --default,我被警告说rvm不是作为一个函数加载的,有些东西不能工作(不记得确切的消息)。
这是一个突破,当我开发~/.bash_profile时,我可以成功地选择该ruby,所有的符号链接(ruby、irb、rake等)都会立即创建。
不过,这并不理想。
我的$HOME文件夹的默认设置通常有三个文件:~/.profile、~/.bash_profile和~/.bashrc (加上用于zsh的文件)。
~/.bash_profile是由rvm安装添加的,我正在将其作为~/.profile的源代码。
然后,如果正在使用~/.bashrc bash,则~/.profile会自动获取。
然而,正如我所说的,通过执行su appusr bash只是~/.bashrc的源代码,因此无法解析将rvm作为函数加载的语句。非常烦人。
告诉~/.bashrc源~/.bash_profile需要某种控制( ENV变量?)为了避免无限的引用循环,而且看起来有点过了.
所以我刚把[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"移到了~/.bashrc中,我想说现在一切似乎都正常了。
发布于 2013-04-06 03:25:56
您应该检查/usr/local/rvm/wrappers,尤其是/usr/local/rvm/wrappers/default,查找可以在没有其他环境设置的情况下从PATH中使用的二进制文件。
https://stackoverflow.com/questions/15835329
复制相似问题