gpt4 book ai didi

ruby-on-rails - 在Rails中,仅模型设置不会调用Sweeper

转载 作者:行者123 更新时间:2023-12-04 03:00:06 25 4
gpt4 key购买 nike

我正在使用Rails应用程序,在这里我使用页面缓存来存储静态html输出。缓存工作正常。不过,我在使缓存过期时遇到麻烦。

我认为我的问题部分是因为我没有从 Controller 中使缓存过期。在模型中处理了为此所需的所有 Action 。这似乎应该可行,但是我发现所有对基于模型的缓存过期的引用似乎都已过时,否则将无法正常工作。

在我的environment.rb文件中,我正在调用

config.load_paths += %W( #{RAILS_ROOT}/app/sweepers )

我在/sweepers文件夹中有一个LinkSweeper文件:
class LinkSweeper < ActionController::Caching::Sweeper
observe Link

def after_update(link)
clear_links_cache(link)
end

def clear_links_cache(link)
# expire_page :controller => 'links', :action => 'show', :md5 => link.md5
expire_page '/l/'+ link.md5 + '.html'
end
end

那么...为什么更新模型时它不删除缓存的页面? (过程:使用脚本/控制台,我正在从数据库中选择项目并保存它们,但是它们的相应页面并未从缓存中删除),而且我还在Link模型中调用通常会调用的特定方法清扫车。都行不通。

如果很重要,则缓存的文件是链接表中键值的md5哈希值。缓存的页面将存储为/l/45ed4aade64d427...99919cba2bd90f.html之类的内容。

本质上,似乎Sweeper实际上并未观察到Link。我还阅读了( here),可能可以将清除程序简单地添加到environment.rb中的config.active_record.observers,但这似乎没有做到(而且我不确定应用程序/清除程序的load_path在environment.rb中消除了这一点)。

最佳答案

请注意:您可以在ApplicationController中使用cache_sweeper

class ApplicationController < ActionController::Base
cache_sweeper :my_sweeper
end

class MySweeper < ActionController::Caching::Sweeper
observe MyModel

def after_update(my_model)
expire_page(...)
end
end

关于ruby-on-rails - 在Rails中,仅模型设置不会调用Sweeper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1463714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com