问题标签 [cache-digests]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 使用带有模板继承的俄罗斯娃娃缓存的问题
我一直在一个相当复杂的 Rails 应用程序的选定部分中相互独立地使用模板继承和俄罗斯娃娃缓存(使用cache_digests gem ),并取得了很大的成功。
我很难以一种理智的方式一起使用这两种技术,这让我怀疑我可能做错了什么......
举一个非常简单的例子,考虑一个由两个控制器组成的应用程序,ThingOnes 和 ThingTwos。这个应用程序有一个布局 ( layouts/application.html.erb
),它简单地呈现一个头文件:<%= render 'header' %>
.
默认情况下,Rails 会在一堆位置中查找这个部分,包括布局的视图目录 ( views/application/_header.html.erb
) 以及任何特定于当前控制器的位置 (likeviews/thing_ones/_header.html.erb
或views/thing_twos/_header.html.erb
)。这意味着,出于缓存目的,我基本上有一个模板依赖列表(不包括引擎或其他任何东西),如下所示:
现在,我们用缓存包装该渲染调用,如下所示:
不幸的是,运行rake cache_digests:nested_dependencies TEMPLATE=layouts/application
会导致以下依赖项列表。
它似乎根本不关心模板继承。修改未包含在列表中的文件具有修改未包含在列表中的文件的预期效果 - 缓存未正确过期并显示过时的标头。
这可以通过指定相关的模板路径来轻松解决,如下所示:
这看起来确实是一个非常糟糕的解决方案,因为它不会很好地增长,并且需要大量琐碎的装饰来缓存调用以保留现有的模板继承行为。
类似地,可以更明确地指定标头位置,如下所示:
这也无法保留现有的模板继承行为,使其不适合我们的需求。
最后一个选择是将cache
调用移动到标头部分本身。这不仅效率低下,因为它将render
调用排除在缓存之外。它也比 DRY 更 WET(将所有内容写两次),这是一个很大的关闭。
所以,要解决我的实际问题......我这样做是否正确?这似乎是一个相当大的缺点,会影响各种各样的实现,但我真的找不到很多与这个特定问题相关的讨论,所以我想知道其他人是否以一种更好的方式来做这件事。有没有更好的方法来做到这一点,或者至少自动为部分渲染指定整个模板依赖层次结构?
ruby-on-rails - 俄罗斯娃娃缓存摘要部分没有冒泡
根据我对使用缓存摘要进行俄罗斯娃娃缓存的理解,为了防止我们必须对片段进行版本控制,如果我更新子片段,摘要键应该冒泡以使其父片段过期。
如果这是正确的,我会遇到一个问题,即我正在更新一个不会过期的子模板,它是父缓存。在这种情况下,我正在更改 /schoolworks/need_grading/row.html.haml 中的 html,并且由于 /schoolworks/need_grading/row.html.haml 上的缓存,这些更改永远不会反映出来。
两个不同页面的haml代码是:
我跑了 rake cache_digests:nested_dependencies TEMPLATE=schoolworks/need_grading 并返回
看起来嵌套依赖项与呈现的部分匹配。我不知道为什么这不会使父缓存过期。
ruby-on-rails - 在 rails4 中禁用缓存摘要
我从 rails 3.2.13 升级到 rails 4.0.1。我遇到了缓存问题,这给了我未定义的方法'expired_fragment'。
有没有办法禁用缓存摘要?
我还添加了这些宝石:
但似乎缓存不像上次那样执行。
任何指导,还是其他人面临同样的问题?
ruby-on-rails-3 - Rails cache_digests 和条件
当我们使用缓存摘要在 Rails 中缓存一个部分时,部分中的条件逻辑是如何处理的?它是否缓存了完整的模板并稍后应用条件,以便可以将正确的 json/html 提供给正确的用户?
ruby-on-rails - Rails 俄罗斯娃娃缓存和 N+1
根据我对 Rails 中俄罗斯娃娃缓存的了解,当我们执行 RDC(俄罗斯娃娃缓存)时,急切加载相关对象或对象列表将是有害的,因为在 RDC 中,我们只是从数据库中加载顶级对象,并查找其缓存的渲染模板和服务。如果我们急切地加载相关的对象列表,如果缓存不是陈旧的,那么这些对象列表将毫无用处。
我的理解正确吗?如果是,我们如何确保在第一次调用时立即加载所有相关对象,以免在第一次加载期间(当缓存不热时)支付 N+1 查询的成本。
ruby-on-rails - Rails cache_digests 和 AbstractControllers
我有一个类,用于渲染一些从 AbstractController 继承的 pdf,我想在视图中使用 cache_digests
当我尝试cache
在视图中调用时
我得到:
我试图在其中包含一些缓存模块,但我可以让它工作
ruby-on-rails - cache_digests gem 中的模板选项有什么用?
我正在使用 cache_digests gem。我试图了解 TEMPLATE 选项在 rakecache_digests:nested_dependencies
和cache_digests:dependencies
rake 任务中的用途。
你能告诉输出是什么意思吗?输出是否显示需要使用缓存渲染的部分列表,以便如果存在不匹配,我可以相应地更改渲染部分方法?
ruby-on-rails - 在 Rails 4 中禁用缓存摘要
我正在将 Rails 3 应用程序迁移到 Rails 4。迁移过程非常顺利,但我遇到的一个大问题是我的旧 Rails 3 代码使缓存失效。我收到的日志如下:
事实证明这是因为 Rails 4 带来了一种新的时髦的缓存,缓存摘要。最后的那一长串十六进制是 Rails 想要与这个缓存片段关联的一些视图的 md5 摘要。
我相信我不需要缓存摘要。我的应用程序很少更新,通常我可以在更新时清除缓存,因此缓存片段的概念是指我的一段视图代码的先前部署版本的概念是无关紧要的。
我看到我可以cache
使用该:skip_digest => true
标志修改任何给定的调用。这篇博文提到修改他们的大量cache
调用 add :skip_digest
。但我相信我想将此标志应用于cache
我的应用程序中的每个调用。当然必须有某种方法来普遍禁用缓存摘要?
ruby-on-rails - Rails 4 将链接重定向到 Redis 上的 IP 地址
我有一个有趣的问题。我在带有 Redis 的 Rails 4 上使用俄罗斯娃娃缓存 (cache_digests)。一段时间后,页面上的大部分链接都会变成这样:“domain/url”到“server_ip/url”
当我刷新 Redis 时它已修复。
我怎么解决这个问题?
ruby-on-rails - ActionView::Digestor.new 接受哪些名称格式?
我在控制台中四处寻找,以弄清楚缓存摘要依赖项是如何计算的。这适用于 app/views/posts/show.html.haml 模板:
这些都不适用于 app/views/posts/_post.html.haml 模板:
(对于两者,finder = ApplicationController.new.lookup_context
)
如何告诉 ActionView 寻找这个部分?