The problem is that the model object doesn't seem to be available to the 
callback function.

For example, in the sweeper:
observe MyModel

def after_create(record)
  expire the cache
end

And, in the BackgroundRB worker:
MyModel.create()

And when the BackgroundRB async task is started, the MyModel 
after_create() method is invoked as expected; however, record is nil (as 
is self).

The record has some info in it that I use to calculate the path to 
expire.  So, I can't call Rails.cache.delete(cache_path) when I can't 
determine the value of cache_path.

Thanks for taking the time to help,
Justin

Ar Chron wrote:
> Justin Britten wrote:
>> I'm having some difficulty finding a way to expire the cache after
>> executing an asynchronous BackgroundRB task.  From a Rails controller I
>> fire off an async worker which will handle importing of data from a file
>> and, when completed, the fragment cache of a page needs to be expired.
>> I've tried ...
>> 
>> 1.  Simply calling expire_action from within the BackgroundRB worker.
>> However, it appears that BackgroundRB doesn't have access to
>> ActionController.
>> 
>> 2.  Using sweepers/observers on the model object being changed by the
>> BackgroundRB worker.  The BackgroundRB worker will do some stuff with
>> the model object, the observer will catch this, and the sweeper will
>> handle expiring the cache.  However, the sweeper complains that the
>> record passed to the after_whatever callback methods is nil.  Without
>> this model object I can't expire the correct cache.
>> 
>> Using Rails 2.1 and the absolute latest BackgroundRB from github.
>> 
>> Any suggestions?
>> 
>> Cheers,
>> Justin
> 
> Have you tried using Rails.cache.delete(cache_path) from the model?
> 
> The sweepers weren't fine-grained enough for my fragment caching, and I 
> ended up just taking control of the cache expiration (for my app, a 
> single model may have, oh, 8 different fragments cached, and it may 
> appear in cache fragments of any number of other models -- polymorphic 
> relationships are cool, but have their downside -- so depending on what 
> changed, a model knows what caches it should expire of its own, and if 
> fragments of models it has a relationship with should expire also - 
> i.e., my name field changed and that other model's cache shows my name).

-- 
Posted via http://www.ruby-forum.com/.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to