/ / Pamięć podręczna szyn nie zwraca się jako obiekty, ale ciągi - ruby ​​na szynach, buforowanie, redis

Pamięć podręczna Railsów nie zwraca się jako obiekty, lecz do łańcuchów - ruby-on-rails, caching, redis

Używam redis jako magazynu pamięci podręcznej i chcę buforować wspólne dane

@links = Rails.cache.fetch "FriendsLinks" do
Link.where(category_id: 0)
end

Ale dane zostały zwrócone Rails.cache.fetch jest String, a nie tablica List obiekty.

Muszę usunąć pamięć podręczną z redis, wtedy następne żądanie będzie działać. Ale bardzo często znów się złamie.

Edytować: dzieje się to tylko w środowisku programistycznym

Odpowiedzi:

1 dla odpowiedzi № 1

Znalazłem problem.

problem polega na tym, że powiązany model nie został załadowany, gdy dane zostały pobrane z redis / memcache. Dlatego ruby ​​nie może wykonać niemarszalnego.

Prostym rozwiązaniem jest ustawienie

config.cache_classes = true

wadą jest to, że musisz ponownie uruchomić aplikację po wprowadzeniu zmian w kodzie.

Kolejnym jest umieszczenie powiązanej klasy przed Rails.cache, na przykład

Link
@links = Rails.cache.fetch "FriendsLinks" do
Link.where(category_id: 0)
end

Lub utwórz inicjator i umieść go w config / initializers

if Rails.env == "development"
Dir.glob("#{Rails.root}/app/models/**/*.rb") do |model_name|
require_dependency model_name
end
end