0

我在 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$
4

2 回答 2

1

您应该/usr/local/rvm/wrappers特别检查/usr/local/rvm/wrappers/default可以PATH在环境中没有其他设置的情况下使用的二进制文件。

于 2013-04-05T19:25:55.747 回答
1

我相信我发现了问题所在。显然rvm没有作为函数正确加载,即
$ type rvm | head -n 1
没有返回“rvm 是一个函数”,而是像“rvm is hashed”(...?...)。

有趣的是,问题不仅限于系统范围的安装。我对系统范围的rvm安装进行了内爆,删除了 中的引用/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只是 sourcing ~/.bashrc,而不是~/.bash_profilervm 放置语句以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

...注意它是如何没有标记的=*
我使用了 command rvm use ruby-2.0.0-p0 --default,并被警告说 rvm 没有作为函数加载,并且某些东西无法工作(无法记住确切的消息)。

这是一个突破,当我找到时,~/.bash_profile我可以成功地选择它,ruby并且立即创建所有符号链接(rubyirbrake等)。

不过,这并不理想。
我的文件夹的默认设置$HOME通常包含三个文件:~/.profile~/.bash_profile~/.bashrc加上 的文件zsh)。
~/.bash_profile是由rvm安装添加的,我有它 source ~/.profile。,然后,如果正在使用 bash
~/.profile,则自动获取源。~/.bashrc

但是,正如我所说,通过执行su appusr bash只是 sources ~/.bashrc,因此无法解析将rvm 作为函数加载的语句。很烦人。
告诉~/.bashrc源代码~/.bash_profile需要某种控制(一个 ENV 变量?)以避免无限引用循环,而且似乎有点矫枉过正......
所以我刚[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"进入~/.bashrc,我想说现在一切似乎都正常了。

于 2013-04-06T14:52:13.533 回答