如何运行特定版本的ruby gem

Obr*_*ios 11 rubygems ruby-on-rails brakeman

我在我的Gemfile之外运行刹车手,所以我没有使用捆绑器.

如果我这样做gem list,我可以看到我有以下制动员

brakeman (3.3.3, 3.3.2, 3.1.4, 3.1.2)
Run Code Online (Sandbox Code Playgroud)

但如果我这样做brakeman --version,我明白了

brakeman 3.1.2
Run Code Online (Sandbox Code Playgroud)

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

gem update brakeman, '3.3.3,
Run Code Online (Sandbox Code Playgroud)

我明白了

Updating installed gems
Nothing to update
Run Code Online (Sandbox Code Playgroud)

那么如何运行brakeman版本3.3.3?

awe*_*ndt 18

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

brakeman _3.3.3_ [args go here]
Run Code Online (Sandbox Code Playgroud)

这不是制动员特有的,你也可以为大多数其他宝石做这件事.

  • 澄清一下,您可以对**所有**其他宝石执行此操作。尝试“gemwhichbrakeman”来查看您从命令行执行的文件实际上只是 RubyGems 生成的垫片(脚本);该垫片采用“_3.3.3_”参数并使用它来确定要调用哪个版本的brakeman。 (2认同)

Jus*_*tin 4

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

  • 捆绑器工件(也许在.bundle/)指向旧版本。尝试在不同的目录中运行,看看是否仍然发生
  • RubyGems 中的一个错误(尝试gem update --system
  • 在安装过程中,它询问您是否要替换brakeman二进制文件,您选择了“否”
  • 如果您使用 Ruby 版本管理器,则可能一个版本与另一个版本位于不同的路径上(例如系统 gem 与由rvm
  • 有时会发生许多GEM_PATH、、、奇怪bundlergem事情rvm

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