防止json / pure加载到Rails中

时间:2012-01-19 05:22:06

标签: ruby-on-rails ruby json rubygems require

我正在编写一个使用'json'gem的Rails应用程序,它可以在'json / pure'和'json / ext'实现之间切换的行为导致了问题。具体来说,有时宝石会引入类似

的行
require 'json/pure'

当发生这种情况时,JSON.parser和JSON.generator会全局切换到基于ruby的慢速版本。然后每次调用JSON.parse和JSON.generate都很慢。

我想避免一种情况,即我不知道的改变宝石依赖性突然使我的网站变得更慢。如何防止'json / pure'被加载,强制执行'json / ext'使用,或者在将来阻止这个问题?

2 个答案:

答案 0 :(得分:0)

不知道这是否适用于您的病例,并且治愈可能比疾病更糟糕:

module Kernel
  alias old_require require

  def require(path)
    if path =='json/pure'
       # do something appropriate
    else
       old_require path
    end
  end
end

当我想在我们的rails应用程序中对各种启动瓶颈的性能进行基准测试时,我已经修补了需要。也许你可以看到为什么这些宝石试图要求'json / pure'并且可能以另一种方式阻止它。

我发现gem源代码通常非常易读。捆绑打开对我有用。

答案 1 :(得分:0)

为了防止加载json / pure,这有效:

require 'json/ext'
JSON.freeze

你必须在需要json / pure之前运行它。