Попытка Rails.cache.delete_matched от бегуна - PullRequest
0 голосов
/ 23 декабря 2011

На redmine 1.2 / rails 2.3.11 я рендеринг файла разметки репозитория как html (как это делает redmine_markdown_extra_viewer ), и теперь я пытаюсь кэшировать результат, который должен обновляться на каждом совершить.

Итак, у меня есть git hook, который извлекает изменения в репозитории, и я бы хотел, чтобы он также очистил соответствующие записи в кэше.

Генерация кэша (в 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"

Хук, который должен очистить кеш, но не имеет никакого эффекта:

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

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

Так что это не работает, и я даже не знаю, выбрал ли я правильное направление для реализации этого. Любой вклад высоко ценится!

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

Какой бэкэнд кеша вы используете?

Если это memcached или что-то отличное от FileStore или MemoryStore, метод delete_matched не поддерживается .

Возможно, вам лучше дать им истечь и просто заменить их кэшированное содержимое по мере их обновления.

0 голосов
/ 13 мая 2016

Проблема заключается в том, что при использовании регулярного выражения в качестве имени фрагмента попробуйте использовать строку в качестве имени фрагмента. Может быть многословно. У меня была похожая проблема с Далли (с Memcached), и это было причиной.

...