Search code examples
ruby-on-railscachingrunner

Trying to Rails.cache.delete_matched from the runner


On redmine 1.2/rails 2.3.11 I'm rendering a repository markdown file as html (as redmine_markdown_extra_viewer does), and now I'am trying to cache the result, which should be updated on each commit.

So I have a git hook that fetch the repo changes, and i'd like it to also clear the corresponding cache entries.

Cache generation (in a RepositoriesController::entry override):

cache_key =['repositories_md', @project.id.to_s, @path.to_s].join('/')
puts cache_key
@content = cache_store.fetch cache_key do
   Kramdown::Document.new(@repository.cat(@path, @rev)).to_html
end
render :action => "entry_markdown"

The hook that should clear the cache, but has no effect:

# This is ok
ruby script/runner "Repository.fetch_changesets"

# This not
ruby script/runner "Rails.cache.delete_matched(/repositories_md\/.*/)"

So it doesn't work and i don't even know if i've taken the right direction to implement that. Any input much appreciated!


Solution

  • Which cache backend are you using?

    If it's memcached or anything other than the FileStore or the MemoryStore, the delete_matched method is not supported.

    You're probably better off letting them expire and just replace their cached contents as they get updated.