问题 您正在使用旧版或stdlib版本的json gem


我已经看到几天前在另一个线程中提到的以下问题以及其他问题,但是这个问题的解决方案(对我而言)似乎没有得到解决。

我最近在我的Ruby 1.9.2-p290环境上运行了测试,并在运行测试脚本时出现以下错误:

You are using an old or stdlib version of json gem
Please upgrade to the recent version by adding this to your Gemfile:

gem 'json', '~> 1.7.7'

当我创建一个在Windows XP上运行的全新Ruby 1.9.3-p392环境时,这个问题仍在继续(请不要问)。令我困惑的是,即使我安装了json 1.7.7或1.8.0(宝石列表粘贴在下面),我仍然会在运行测试时收到此消息。它并没有真正影响我的测试结果,但每次看到这个警告都很烦人。

我需要将哪个Gemfile添加到其中,以及它将位于何处?

gem list:
bigdecimal (1.1.0)
childprocess (0.3.9)
commonwatir (4.0.0)
ffi (1.8.1 x86-mingw32)
io-console (0.4.2, 0.3)
json (1.8.0, 1.7.7, 1.5.5)
mini_portile (0.5.0)
minitest (5.0.0, 2.5.1)
multi_json (1.7.3)
rake (10.1.0.beta.3, 10.0.4, 0.9.2.2)
rdoc (4.0.1, 3.9.5)
rubygems-update (2.0.3)
rubyzip (0.9.9)
selenium-webdriver (2.32.1)
watir-webdriver (0.6.4)
websocket (1.0.7)
win32-api (1.4.8 x86-mingw32)
win32-process (0.7.2)
windows-api (0.4.2)
windows-pr (1.2.2)

11151
2018-05-14 12:52


起源

旁白:我在Ruby 1.9.3-p392中看到过相同的行为。另请注意,即使在未使用Bundler的环境中也会出现此警告,因此编辑Gemfile的建议不适用。 - L2G
有关gemfile的建议显然是其他一些宝石开发者认为“肯定每个人都使用捆绑器” - Chuck van der Linden
或者“肯定每个人都使用rvm”......或者“肯定每个人都使用Linux”......或“当然每个人都使用了解ANSI转义码的终端”...... 叹。 - L2G


答案:


消息来自于 multi_json 宝石,似乎它可能是一个错误。 我建议关注这张GitHub票。

如果消息太令人痛苦,您可以降级 multi_json 到版本1.6.1摆脱它。 (至少这对我有用。)

更新:

在我看来,问题的根源在于 multi_json 想限制它的使用 json 和 json_pure 特定版本的宝石,作者 multi_json 没有使用 gem 在他的代码中激活这些版本的方法。 (听起来他认为Bundler是指定宝石版本的唯一方法;它不是。)

以来 multi_json 会尝试的 oj 和 yajl-ruby 宝石在尝试之前 json使用其中一个可能是最好的解决方法。所以你可以安装最新的 multi_json 然后安装 oj 要么 yajl-ruby 随之而来。


10
2018-05-16 01:21



实际上,Watir Google Group的帖子建议将multi_json降级为1.7.2;这当然对我有用。 (groups.google.com/group/watir-general/browse_thread/thread/...) - GJHmf
“(听起来他认为Bundler是指定宝石版本的唯一方式;它不是。)”为此+1。他在错误消息中提出的关于改变gemfile的建议更多地证明了这种想法。 - Chuck van der Linden
@GJHmf如果这对您有用,为什么不接受答案呢? - Chuck van der Linden
道歉,我被贬低了;完成。 - GJHmf
我正在运行常规ruby脚本(即不是rails)并且遇到错误。通过安装'oj'宝石,错误消失了。 - Alan W. Smith


尝试这个:

gem update --system 
gem update

5
2018-05-14 21:38



谢谢你发帖这个很棒! - Chris Hough


例如,转到Ruby安装路径 C:\Ruby192\lib\ruby\1.9.1\json

打开 version.rb 文件并更新版本详细信息,如下所示: VERSION = '1.7.7'


1
2018-05-17 06:01





尝试使用。运行测试 bundle exec 命令。这将迫使您的环境使用宝石 Gemfile.lock


0
2018-05-15 10:54