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 № 1Znalazł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