我最近遇到了一些JSON解析问题,并发现我们正在使用一个非常古老的Psych和libyaml版本:Psych版本:1.2.2; Psych libyaml版本:0.1.4
最新的Psych有更好的JSON解析支持(YAML的子集)并且我验证了这解决了我的问题,但是我在配置我们的Rails应用程序以使用最新的Psych gem与与ruby捆绑的Psych版本时遇到问题。 我只是添加了gem' psych'在gemfile中并根据在线文档运行bundle install。 现在,当我尝试运行任何东西时,我遇到了错误: 未初始化的常量Psych :: Streaming :: ClassMethods(NameError)
虽然没有意义,但我知道这里发生了什么,内部Rails使用的是没有这些新方法的Psych :: Streaming的旧版本。当我调试时,我看到它使用旧的目录(例如~Ruby1.9.3 \ lib \ ruby \ 1.9.1 \ psych \ streaming.rb)与它应该使用的新lib(例如~Ruby1.9.3 \ lib \ ruby \宝石\ 1.9.1 \宝石\迷幻2.0.8 \ lib中\迷幻\ streaming.rb)
所以这似乎是一般的混乱,新的Psych宝石中的代码是从旧捆绑的Psych版本调用代码。如何让Rails不使用旧的捆绑版本并使用最新的Psych ??
我们正在使用旧版本的Rails(3.2.8)和ruby(1.9.3-p125),遗憾的是,升级现在不是项目的选项...
**更新**
看起来根源导致这个问题将是一场噩梦,所以也许我需要一种新的方法。有没有办法只在我的新代码中使用最新的Psych gem,但让其他所有东西(如外部ruby库)继续使用旧的捆绑版本?在我开始四处走动之前,我们对旧的Psych版本没有任何问题。在我的新代码中解析更复杂的JSON ......