如何 运行 ruby gem 的特定版本

How to run a specific version of a ruby gem

我是 运行我的 Gemfile 之外的 brakeman,所以我没有使用捆绑器。

如果我这样做 gem list,我可以看到我有下面的 brakeman

brakeman (3.3.3, 3.3.2, 3.1.4, 3.1.2)

但是如果我这样做 brakeman --version,我会得到

brakeman 3.1.2

所以我没有使用最新版本。如果我做 gem update brakeman

gem update brakeman, '3.3.3,

我明白了

Updating installed gems
Nothing to update

那我怎么运行 brakeman 3.3.3版?

如果您安装了多个 gem 版本并且您想要从命令行调用特定版本,您可以使用:

brakeman _3.3.3_ [args go here]

这不是 brakeman 特有的,您也可以对大多数其他 gem 执行此操作。

我无法重现此问题,但我可以想到可能发生这种情况的几个原因:

  • Bundler 工件(可能在 .bundle/ 中)指向旧版本。在不同的目录中尝试运行,看看它是否仍然发生
  • RubyGems 中的错误(尝试 gem update --system
  • 在安装过程中,它询问您是否要替换 brakeman 二进制文件,您选择了 "no"
  • 如果您使用的是 Ruby 版本管理器,可能一个版本与另一个版本在不同的路径上(例如系统 gem 与 rvm 管理的系统)
  • 任意数量的 GEM_PATHbundlergemrvm 有时会发生的怪事

无论如何,如果我是你,我会 gem uninstall brakeman,删除所有版本,然后重新安装。如果您使用的是 rvm,请从新的 gem 设置或 rvm gemset empty 当前设置开始。

我遇到了类似的问题:我卸载了某个gem版本,但该版本仍然出现。

TL;DR:rbenv rehash 成功了。 (显然只对 rbenv 用户有效)