Ich möchte Fragmente mit einem Kehrmaschine ablaufen. Die Sweeper-Callbacks werden ausgeführt, aber die Aufrufe von expire_fragment tun nichts, weil (ich nehme an) cache_configured? gibt null zurück. Caching ist konfiguriert und Fragmente werden erstellt und in meinen Vorlagen verwendet (in den Protokollen verifiziert). Was mache ich falsch?Rails 3: Sweeper zerstört keine Fragmente, denkt Caching wurde deaktiviert
application.rb
config.cache_store = :mem_cache_store, "XXX.XXX.XXX.XXX", { # I use a real IP
:compress => true,
:namespace => "#{Rails.env}_r3"
}
config.active_record.observers = [:auction_sweeper, :address_sweeper]
production.rb
config.action_controller.perform_caching = true
auction_sweeper.rb
class AuctionSweeper < ActionController::Caching::Sweeper
observe Auction
def after_create(auction)
Rails.logger.info "AuctionSweeper.expire_details #{auction.id} #{cache_configured?.inspect}=#{perform_caching.inspect}&&#{cache_store.inspect}"
expire_fragment("auction/#{auction.reference_sid}")
end
end
In Protokolldateien, cache_configured? ist null und so ist perform_caching und cache_store.
AuctionSweeper.expire_details 12732 nil=nil&&nil
Also gehe ich davon aus, dass meine Fragmente abgelaufen sind nicht, da der Code von expire_fragment lautet:
File actionpack/lib/action_controller/caching/fragments.rb, line 87
87: def expire_fragment(key, options = nil)
88: return unless cache_configured?
Danke! Der Hack mit dem @controller hat für mich funktioniert. Es ist seltsam, dass dies in der offiziellen Dokumentation nicht erwähnt wird. –
Danke, dass Sie diese Lösung teilen! :-) – Arkan