expire_page not working

I've enabled page caching on a site I'm currently constructing. The sweeper is called upon any changes made to the model, as expected. The sweeper code is as follows:

class PersonSweeper < ActionController::Caching::Sweeper

  observe Person

  def after_update(person)     expire_staff_page   end

  def after_destroy(person)     expire_staff_page   end

  def expire_staff_page     $stderr.puts "@@@@@ Expiring staff page"     expire_page( :controller => 'welcome', :action => 'staff' )     $stderr.puts "@@@@@ Staff Page Expired"   end end

In my administrative controller, I have

class Admin::PeopleController < Admin::AdminBaseController

  cache_sweeper :person_sweeper

and finally, in the public controller, I have

class WelcomeController < ApplicationController

  caches_page :staff

When I hit the public 'staff' page, the cache file is created. When changes are made to the underlying data model, the sweeper method is invoked, and I see

@@@@@ Expiring staff page @@@@@ Staff Page Expired

in the server logs. However, the generated file in public/welcome/ staff.html is not removed.

What am I doing wrong?

Solved it. Instead of

expire_page( :controller => 'welcome', :action => 'staff' )

I should have used

expire_page( :controller => '/welcome', :action => 'staff' )

I guess the issue was that I'm trying to expire content generated in a controller different from the one that initially created the cached page. Instead of expiring ./public/welcome/staff.html, ./public/admin/ welcome/staff.html was being expired. It didn't exist, so of course nothing happened.

I ran into the same administration / sweeper problem. Although I've got it working, I'm still unclear about how it all works. My revelation was that the admin controller needed the cache_sweeper :person_sweeper , no the 'front' controller.