目录
1.工作原理
rbenv使用可以被注入到您的 PATH
shim可执行文件来拦截Ruby命令,确定您的应用程序已指定了哪个Ruby版本,并将您的命令传递给正确的Ruby安装。
2.PATH环境变量
当您运行诸如ruby
或rake
命令时,您的操作系统将通过一个目录列表搜索以查找具有该名称的可执行文件。此目录列表位于名为PATH
的环境变量中,列表中的每个目录均由冒号分隔:
/usr/local/bin:/usr/bin:/bin
在目录PATH
中搜索由左到右,所以在该列表的开头的目录匹配的可执行文件的优先级高于结尾的另外一个。在这个例子中,该 /usr/local/bin
目录将被搜索的第一个,然后/usr/bin
,然后/bin
。
3.Shims解释
shims中文意思是垫片的意思,比较形象的解释就是在某个地方插入个垫片,这个垫片起到拦截的作用,然后把您的命令转到对应的地方。
rbenv通过在您的 PATH
前面插入 shims 目录的原理来工作:
~/.rbenv/shims:/usr/local/bin:/usr/bin:/bin
通过这个被称为 rehashing 的过程,rbenv通过在 PATH
中的 shims 以匹配每一个Ruby命令到达每个已安装的Ruby版本对应的irb
,gem
,rake
,rails
,ruby
等命令。
Shim是轻量级的可执行文件,它们仅将您的命令传递给rbenv。因此,在安装了rbenv的情况下,比如运行rake
时,您的操作系统将执行以下操作:
- 在您的
PATH
中搜索名为rake
的可执行文件 - 在您的
PATH
开头查找名为rake
的rbenv shim - 运行名为
rake
的shim,shim将命令传递给rbenv
4.切换Ruby版本
执行shim程序时,rbenv通过从以下来源按以下顺序读取来确定要使用的Ruby版本:
RBENV_VERSION
环境变量:您可以使用rbenv shell
命令在当前的Shell会话中设置此环境变量。.ruby-version
通过搜索正在执行的脚本的目录及其每个父目录,直至到达文件系统的根目录,找到了第一个.ruby-version
文件。- 通过搜索当前工作目录和它的每个父目录,直至达到你的文件系统的根目录,找到第一个
.ruby-version
文件。您可以在当前工作目录中使用rbenv local
命令修改文件.ruby-version
。 - 全局
~/.rbenv/version
文件。您可以使用rbenv global
命令修改此文件。如果不存在全局版本文件,则rbenv假定您要使用 system 版本Ruby,如果rbenv不在您的路径中,则将运行任何版本。
5.Ruby安装路径及目录
一旦rbenv确定了您的应用程序指定了哪个Ruby版本,它将把命令传递给相应的Ruby安装。
每个Ruby版本都安装在自己的目录下 ~/.rbenv/versions
。例如,您可能已安装以下版本:
~/.rbenv/versions/1.8.7-p371/
~/.rbenv/versions/1.9.3-p327/
~/.rbenv/versions/jruby-1.7.1/
rbenv的ruby版本名称与在 ~/.rbenv/versions
下的目录名称同名。
6.环境变量
名称 | 默认 | 描述 |
---|---|---|
RBENV_VERSION | 指定要使用的Ruby版本。 另见 rbenv shell | |
RBENV_ROOT | ~/.rbenv | 定义rbenv和Ruby版本以及shims所在的目录。 另见 rbenv root |
RBENV_DEBUG | 输出调试信息。 也作为: rbenv --debug <subcommand> | |
RBENV_HOOK_PATH | 参见维基 | 用冒号分隔的路径列表搜索rbenv钩子。 |
RBENV_DIR | $PWD | 在此目录下搜索.ruby-version 文件。 |
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/rubye/1795.html