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 № 1Ich 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