Rails Monkey Patch alias_method не вызывает ошибку метода - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь обезопасить рельсы и метод Rails.cache.fetch/read, и добавляю свой дополнительный журнал при каждом событии выборки / чтения, но у меня есть другая ошибка, которую я не могу найти в любом ответе.

здесьмой код патча обезьяны

module ActiveSupport
    module Cache
        class Store
            alias_method :old_fetch, :fetch
            alias_method :old_read, :read

            def fetch(name, options=nil)
                Rails.logger.info "Memcached Hotkey Fetching: #{name}"
                Rails.logger.info caller
                old_fetch(name, options)
            end

            def read(name, options=nil)
                Rails.logger.info "Memcached Hotkey Reading: #{name}"
                Rails.logger.info caller
                old_read(name, options)
            end
        end
    end
end

вот где Трэвис сломался

class B < ActiveRecord::Base
  def self.cache
    Rails.cache.fetch(CACHE_KEY, :expires_in => 1.hour) do
      all
    end
  end

где-то есть код, вызывающий B.cache.each do |x| blablabla end

Error message:  You have a nil object when you didn't expect it! (NoMethodError),
You might have expected an instance of Array.
The error occurred while evaluating nil.each

вопрос в том, что яделать неправильно?я просто исправляю два метода в Store, но почему кажется, что они перезаписывают все, что вызывает .cache

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...