Предотвратить загрузку json/pure в Rails

Я пишу приложение Rails, используя гем «json», и его поведение, когда оно может переключаться между реализациями «json/pure» и «json/ext», вызывает проблемы. В частности, иногда гем вводит строку вроде

require 'json/pure'

Когда это происходит, JSON.parser и JSON.generator глобально переключаются на медленную версию на основе ruby. Тогда каждый вызов JSON.parse и JSON.generate будет медленным.

Я хочу избежать ситуации, когда изменяющаяся зависимость гем, без моего ведома, внезапно делает мой сайт намного медленнее. Как я могу предотвратить загрузку «json/pure», принудительно использовать «json/ext» или иным образом предотвратить эту проблему в будущем?


person lacker    schedule 19.01.2012    source источник


Ответы (2)


Не знаю, сработает ли это в вашем случае, а лекарство может быть хуже болезни:

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 в целом очень читабельным. Открытый пакет делает свое дело для меня.

person edk750    schedule 19.01.2012
comment
Вы можете изменить super на old_require(path) - person Reactormonk; 19.01.2012
comment
Я могу остановить это, когда обнаружу это - проблема в том, что много людей работают над кодовой базой, и я хотел бы программно запретить людям использовать json/pure в будущем. - person lacker; 19.01.2012

Чтобы предотвратить загрузку json/pure, это работает:

require 'json/ext'
JSON.freeze

Вы должны запустить это до того, как потребуется json/pure.

person lacker    schedule 20.01.2012