【问题标题】:How to make a specific gem version as default?如何将特定的 gem 版本设为默认?
【发布时间】:2017-03-02 06:38:09
【问题描述】:

我有两个版本的 ruby​​ gem。

json (default: 2.0.2, 1.8.6)

这里,最新版本设置为默认;但是我需要将json 1.8.6 设置为默认值。无论如何将旧版本的gem设置为默认值?因为我无法卸载默认的 json 版本。需要在可用的 gem 版本之间切换。

【问题讨论】:

  • 您是否使用 rvm 来管理您的 ruby​​ 版本?
  • @EddeAlmeida 是的,我使用 RVM;无论如何通过它?
  • 当然。您可以为此应用程序创建一个私有包,并仅在此包中安装您需要的 gem。
  • 你在这个项目中使用的是什么版本的 Ruby?
  • 为您的项目使用捆绑器。

标签: ruby-on-rails ruby rubygems


【解决方案1】:

检查你有什么:

gem list json

设置你想要的:

gem install --default -v1.8.6 json

这对于诸如“捆绑器”之类的东西最有用!!! 对于其他事情,使用 bundler 和 Gemfile 可能是更好的选择。

【讨论】:

  • 使用 --default 可能会弄乱您的 gem 安装,并且不适用于选择默认的较低版本(我在运行 gem install --default 后花了一些时间来修复我的 ruby​​ 安装)
  • @acecilia 你是怎么解决的?
  • 我卸载了所有 gems 和 ruby​​,然后我重新安装了它
  • --default 使得宝石无法被移除(很容易)。请参阅此处的“默认 gem”说明:stdgems.org。我认为--default 选项不是您想要的。有关如何删除使用 --default 安装的 gem,请参阅此答案 stackoverflow.com/a/46691098/6824752
【解决方案2】:

添加

gem 'json', '1.8.6'

发送至您的Gemfile 或执行

gem install 'json' -v 1.8.6 # may require sudo if you use system ruby

从终端。

【讨论】:

  • 我已经安装了 1.8.6;但我仍然尝试过;不走运:(
  • 所以,如果您没有任何可移植性问题,请这样做,require 'absolute/path/to/gems/ruby-2.3.1/gems/json-1.8.6'
  • 没有工作 :( 无法加载此类文件 -- /Users/%username%/.rvm/gems/ruby-2.4.0/gems/json-1.8.6 (LoadError)
【解决方案3】:

Gemfile 是必须的,但还不够。你也应该换行

require 'json'

require 'bundler/setup'
Bundler.require :default

这将需要在您的Gemfile 中指定的所有宝石,但没有group

【讨论】:

  • 从技术上讲,这将使用Gemfile.lock
【解决方案4】:

将此添加到您的 Gemfile

gem 'json', '1.8.6'

现在在命令行中运行它

bundle update

这应该设置您需要的版本

【讨论】:

  • 它不起作用;因为我已经安装了 json 2.0.2 并且它被设置为默认值
【解决方案5】:

正如您在 cmets 中所说,由于您使用 RVM 管理您的 Ruby 版本,因此有一个简单的解决方案:为此应用程序创建一个私有包,并仅在此包中安装您需要的 gem 版本。

你可以这样做:

1) 进入你的应用目录;

2) 输入以下命令

rvm use ruby-2.4.0@your_app_name --ruby-version --create

(我假设您使用的是 Ruby 2.4.0。如果这不是您的版本,请在上面的命令中相应地替换它。)

3) 安装捆绑器 gem

gem install bundler

4) 确保您的 Gemfile 声明了您需要的 gem 版本。在这种情况下,它必须有以下行:

gem "json", "1.8.6"

5) 现在运行

bundle install

你就完成了!

警告:此过程将确保 json gem 为 1.8.6 版。但是,如果安装的其他一些 gem 需要更新版本的 json gem,您的 bundle install 可能会出现问题。在这种情况下,您必须通过其他方式解决此冲突。

要了解有关不同应用程序的不同捆绑包的更多信息,请阅读this

我希望这会有所帮助。

【讨论】:

    【解决方案6】:

    上下文:

    从 CLI 运行一个简单的 ruby​​ 测试

    ruby -I test test/controllers/api_controller_test.rb

    错误:

    您已经激活了 json 2.0.2,但是您的 Gemfile 需要 json 1.8.6。由于 json 是默认 gem,您可以删除对它的依赖或尝试更新到支持 json 作为默认 gem 的较新版本的 bundler。 (Gem::LoadError)

    解决方法只是使用 bundle exec 运行测试,如下所示:

    bundle exec ruby -I test test/controllers/api_controller_test.rb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2016-04-29
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多