我在ubuntu 12.04上并安装了rvm系统以下:
$ \curl -L https://get.rvm.io | sudo bash -s stable
到目前为止,我总是执行单个用户安装,并且说实话,我对系统安装的结果感到很困惑。
它确实将rvm bin目录放在了我的路径中,但是它使用无法直接使用的名称对所有二进制文件进行符号链接。
这是否意味着我应该逐个对它们进行符号化?
出了什么问题?
这是一种亵渎行为吗?
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$
答案 0 :(得分:1)
您应该/usr/local/rvm/wrappers
特别是/usr/local/rvm/wrappers/default
检查可以在PATH
使用的二进制文件,而不需要在环境中进行其他设置。
答案 1 :(得分:1)
我相信我发现了什么是错的。显然rvm
未正确加载为函数,即为
$ type rvm | head -n 1
没有返回“rvm是一个函数”,但像“rvm是哈希”(......?...)。
有趣的是,问题不仅限于系统范围的安装。我破坏了系统范围的 rvm 安装,删除了/etc
中的引用,并在没有sudo
的情况下重新安装了......同样的问题。
我说这是我的错,而“我的”我的意思是我不知道 bash 如何处理某些用户切换。它也可能对其他人有用,所以我会报告我做了什么。
我以普通用户身份进入服务器,然后切换到将运行rails stack的用户:su appusr
(使用bash)。
之后,我使用以下方式安装rvm
:
$ \curl -L https://get.rvm.io | bash -s stable
当我尝试系统广泛安装时,我当然也将用户添加到 rvm 组中:
$ sudo usermod -a -G rvm appusr
...然后再次注销:exit
,再次su appusr
。
现在,似乎这样做 bash 只是来源~/.bashrc
,而不是~/.bash_profile
,其中rvm将语句加载rvm
作为功能:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
仍然,rvm
二进制文件位于 PATH 中,我可以发出安装ruby所需的命令。
到目前为止,这么好
问题是在安装后它以某种方式无法选择我已安装的 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
的文件)。
rvm 安装添加了~/.bash_profile
,我的源代码为~/.profile
。
如果正在使用 bash ,~/.profile
会自动提供~/.bashrc
来源。
正如我所说,通过su appusr
bash 来源~/.bashrc
,因此无法解析加载 rvm作为函数的语句。非常讨厌。
将~/.bashrc
告诉源~/.bash_profile
需要某种控制(一个ENV变量?)以避免无限的参考循环,并且似乎过度使用...
所以我只是将[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
移到~/.bashrc
,我说现在一切似乎都有效。