2009-05-22 5 views
1

Dieser hat mich ratlos.Schienen - Fragmentcache läuft nicht ab

Ich habe eine Ansicht mit einem Cache gespeicherten Fragmente:

- cache :key=>"news" do  
    %h2 News 
    - etc 

Ich habe eine Kehrmaschine, die verwendet:

def expire_home_cache 
    puts "expire_home_cache" 
    expire_fragment(:key => "news") 
end 

Die Kehrmaschine genannt wird, wie ich „expire_home_cache“ in der Ausgabe der Konsole sehen kann.

Aber das Fragment nicht aktualisiert ...

Irgendwelche Ideen?

Antwort

2

Sie könnten versuchen, diese:

cache("news") do  
    %h2 News 
    - etc 
    end 

und ...

def expire_home_cache 
    puts "expire_home_cache" 
    expire_fragment("news") 
end 

... oder dies versuchen ...

- cache({:key=>"news"}) do  
    %h2 News 
    - etc 

ich das Problem denke sein kann dass ruby ​​oder rails es schwer haben zu bestimmen, was genau der key ist und so erzeugen die cachemethode und expire_fragment zwei verschiedene cache ke ys.

+0

In Rails 4.x könnten Sie auch tun müssen, um 'Cache ("news", skip_digest : wahr) '. – Kris

4

Try expire_fragment(:key => "news") mit ActionController::Base.new.expire_fragment(:key => "news")

Keine Zeit ersetzt zu erklären, aber es funktioniert für mich.

+0

Ich wünschte, ich könnte das mehr verbessern ... arbeitete wie ein Charme! – concept47

+0

Stellen Sie sicher, dass Sie --- cache_sweeper: whatever_sweeper --- in Ihrem application_controller.rb setzen, damit das obige funktioniert. – concept47

+0

Ich hatte eine unerklärliche Instanz, wo der Kehrer den Cache für eine Kindervereinigung ablehnen würde, bis ich diese Antwort versuchte, und es funktionierte. Ich verstehe nicht warum. Die Sweeper-Callbacks wurden aufgerufen, ebenso wie der expire_fragment-Code. Ungerade. – twmills

1

Der richtige Weg, dies zu tun ist:

cache :news do 

    ... 
end 

Und dann in Ihrer Kehrmaschine:

expire_fragment :news 
+0

Also sollte der Schlüssel ein Symbol sein, kein String? –

+0

Sie können eine Zeichenfolge oder ein Symbol erstellen, aber es muss kein Hash sein. –