我可以从 rbenv 环境之外执行 gems 吗?
Can I execute gems from outside an rbenv environment?
我能够按如下方式安装和执行 gem:
rbenv install 2.4.1
rbenv local 2.4.1 # enter the environment
gem install fpm
fpm --version
我也希望能够从环境外部执行 gem,例如:
rbenv local --unset # leave the environment
rbenv rehash # update shims
fpm --version
但我得到的是:
rbenv: fpm: command not found
The `fpm' command exists in these Ruby versions:
2.4.1
我是不是误解了 rbenv 垫片的工作原理?我可以从 rbenv 环境之外执行 gem 吗?
从您 Github 问题中的评论来看,您现在似乎已经了解了基本概念; rbenv shims 只不过是美化的 shell 脚本,将命令绑定到特定的当前活动 Ruby 版本。
但是没有什么能阻止您创建自己的硬编码垫片。例如,假设您想要在任何特定 rbenv 环境之外可用的全局 fpm
命令。
这是一个简单的方法:
> rbenv local 2.4.1
> ln -s `rbenv which fpm` ~/.rbenv/bin/fpm24
> rbenv local --unset
> fpm24 --version
1.10.2
这会将 "shim" 安装到 ~/.rbenv/bin/fpm24
中,这是指向 rbenv 先前安装的 2.4.1 gem 的硬编码指针。现在这个 fpm24
命令可以在任何地方使用,只要你的 PATH 中有 ~/.rbenv/bin
。
我能够按如下方式安装和执行 gem:
rbenv install 2.4.1
rbenv local 2.4.1 # enter the environment
gem install fpm
fpm --version
我也希望能够从环境外部执行 gem,例如:
rbenv local --unset # leave the environment
rbenv rehash # update shims
fpm --version
但我得到的是:
rbenv: fpm: command not found
The `fpm' command exists in these Ruby versions:
2.4.1
我是不是误解了 rbenv 垫片的工作原理?我可以从 rbenv 环境之外执行 gem 吗?
从您 Github 问题中的评论来看,您现在似乎已经了解了基本概念; rbenv shims 只不过是美化的 shell 脚本,将命令绑定到特定的当前活动 Ruby 版本。
但是没有什么能阻止您创建自己的硬编码垫片。例如,假设您想要在任何特定 rbenv 环境之外可用的全局 fpm
命令。
这是一个简单的方法:
> rbenv local 2.4.1
> ln -s `rbenv which fpm` ~/.rbenv/bin/fpm24
> rbenv local --unset
> fpm24 --version
1.10.2
这会将 "shim" 安装到 ~/.rbenv/bin/fpm24
中,这是指向 rbenv 先前安装的 2.4.1 gem 的硬编码指针。现在这个 fpm24
命令可以在任何地方使用,只要你的 PATH 中有 ~/.rbenv/bin
。