我在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$
你应该检查/usr/local/rvm/wrappers
,特别是/usr/local/rvm/wrappers/default
的二进制文件可以从PATH
中使用,而在环境中没有其他设置
我相信我找到了问题所在。显然rvm
没有作为一个函数正确加载,那就是$ type rvm | head -n 1
没有返回"rvm是一个函数",但类似于"rvm是散列的"(…?…)。
有趣的是,这个问题并不局限于整个系统的安装。我爆破了系统范围rvm install,删除了/etc
中的引用,并在没有sudo
的情况下再次安装它…同样的问题。
我要说这是我的错,我的意思是我不知道bash如何处理一些用户切换。它可能对其他人也有用,所以我将报告我所做的。
我以普通用户身份ssh到服务器,然后切换到运行rails堆栈的用户: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所需的命令。到目前为止,一切顺利。
问题是,在安装之后,它不知何故未能选择仅
ruby
我已经安装作为默认解释器,所以它没有创建符号链接。我注意到这一点,因为当我发布rvm list
时,我看到了:
rvm rubies
ruby-2.0.0-p0 [ x86_64 ]
# => - current
# =* - current && default
# * - default
…注意NOT被=*
标记。
我使用命令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
。
如果使用的是bash,那么~/.profile
将自动生成~/.bashrc
。
正如我所说的,然而,通过执行su appusr
bash只是源~/.bashrc
,因此无法将加载rvm的语句解析为函数。很烦人的。
告诉~/.bashrc
源~/.bash_profile
将需要某种控制(一个ENV变量?),以避免无限引用循环,似乎有点小题大做…
所以我只是把[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
移动到~/.bashrc
,我想说现在一切似乎都工作了。