/ / Rails Cache kehrt nicht als Objekte zurück, sondern als Strings - Ruby-on-Rails, Caching, Redis

Rails Cache kehrt nicht als Objekte zurück, sondern als Strings - Ruby-on-Rails, Caching, Redis

Ich verwende redis als Cache-Speicher und möchte allgemeine Daten zwischenspeichern

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

Aber Daten kamen von zurück Rails.cache.fetch ist ein String, nicht ein Array von List Objekte.

Ich muss den Cache von Redis löschen, dann würde die nächste Anfrage funktionieren. Aber sehr oft wird es wieder brechen.

Bearbeiten: Das passiert nur in der Entwicklungsumgebung

Antworten:

1 für die Antwort № 1

Ich habe das Problem gefunden.

Das Problem ist, dass das verwandte Modell nicht geladen wurde, wenn Daten aus redis / memcache abgerufen wurden.

Einfache Lösung ist zu setzen

config.cache_classes = true

Der Nachteil ist, dass Sie Ihre App neu starten müssen, wenn Sie Codeänderungen vornehmen.

Eine andere ist nur die verwandte Klasse vor Rails.cache, wie zum Beispiel

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

Oder erstellen Sie einen Initialisierer und legen Sie ihn unter config / initializers ab

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