如何运行特定版本的ruby gem

19

我在Gemfile之外运行brakeman,因此没有使用bundler。

如果我运行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?

3个回答

34

如果你安装了多个 gem 版本并希望从命令行调用特定版本,可以使用以下命令:

brakeman _3.3.3_ [args go here]

这不仅适用于Brakeman,您也可以为大多数其他宝石执行此操作。


1
如果我执行 brakeman _3.3.3_ --version,它仍然返回 3.1.2,那么我真的在运行 3.3.3 吗? - Obromios
1
我已经在另一个系统上尝试过这个,它确实可行。我的Brakeman安装可能有一些奇怪的问题。我已经点赞了你的回答。 - Obromios
2
请注意,您可以对所有其他 gem 执行此操作。尝试 gem which brakeman,以查看您从命令行执行的文件实际上只是 RubyGems 生成的一个 shim(脚本);该 shim 使用 _3.3.3_ 参数来确定要调用哪个版本的 brakeman。 - Ryan Lue

4

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

  • Bundler构件(可能在.bundle/中)指向旧版本。尝试在不同的目录中运行并查看是否仍然发生此问题
  • RubyGems存在漏洞(尝试使用gem update --system更新)
  • 在安装期间,它询问您是否要替换brakeman二进制文件,而您选择了“否”
  • 如果您正在使用Ruby版本管理器,则可能一个版本位于另一个路径上(例如系统gem与由rvm管理的gem之间)
  • 任意数量的GEM_PATHbundlergemrvm奇怪现象有时会发生

无论如何,如果我是你,我会gem uninstall brakeman,删除所有版本,并进行全新安装。如果您正在使用rvm,请从新的gemset或rvm gemset empty当前的gemset开始。


这是一个极端的选择,但是应该可以解决问题。我正在使用rvm。我会尝试一下。 - Obromios

1

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

简而言之:rbenv rehash 解决了问题。(仅适用于 rbenv 用户)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接