Problem with method that performs a rake

hello,

I am new to programming and am trying to create a clear_cache method.
This method is invoked when a submit button is pressed on a partial.

def clear_cache
    Dir.chdir(’../../../../../’) #This moves up to the appropriate
directory
    system(‘rake _0.7.3_ tmp:cache:clear’)
    redirect_to ‘http://127.0.0.1:3000/admin
end

The method is certainly being invoked as the redirect is working fine,
however, the method skips over the first two lines, no error messages
are appearing but the cache is not being cleared. if this method is
invoked in a seperate file in the same directory, using a call to the
method and the f5 button, the cache is clearing.

def clear_cache
    Dir.chdir(’../../../../../’)
    system(‘rake _0.7.3_ tmp:cache:clear’)
    redirect_to ‘http://127.0.0.1:3000/admin
end

clear_cache

Am pretty confused as to why in our controller the first two lines are
being skipped over and would greatly appreciate any help i recieve with
this issue.

regards,
mike

The chdir line is almost certainly wrong - going to RAILS_ROOT would
be much more reliable.

I'm also unsure what a novice programmer is doing shelling out to a
2.5 year old version of Rake. Is there some reason why you're stuck on
0.7.3?

Hardcoding the path to the redirect is also incorrect - you'll
probably want something more like "redirect_to '/admin'", which will
work even if the app isn't running on localhost...

Finally, the entire premise here seems a little off - you haven't
mentioned what's in the cache dir that you want to clear out, but
there are much better ways of handling it in most circumstances. Take
a look at the framework docs for ActionController::Caching
(specifically, sweepers and friends).

--Matt Jones

Michael Wright wrote:

hello,

I am new to programming and am trying to create a clear_cache method.
This method is invoked when a submit button is pressed on a partial.

You *might* want to do this via a method call to the model after the
update/save is completed.

def clear_cache
    Dir.chdir(’../../../../../’)
    system(‘rake _0.7.3_ tmp:cache:clear’)
    redirect_to ‘http://127.0.0.1:3000/admin
end

tmp:cache:clear is an awfully heavy-handed way to clear the cache. If
you smart-code your cache keys, a simple call to Rails.cache.delete from
within the model selectively dump cache fragments, whether that
'fragment' is a little bit of HTML or a whole page, just depends on your
cache key.

Your controllers can use Rails.cache.exist?(fragment_name) to avoid the
DB hit:

Your views can contain code like:
<% cache(fragment_name) do %>
   regular erb or haml or whatever
<% end %>

and the models expire their own fragments via code using
Rails.cache.delete(fragment_name)