CQ / AEM Dispatcher不会刷新二进制文件

时间:2014-07-11 11:12:03

标签: cq5 dispatcher aem

我们的应用程序从旧系统导入二进制文件(主要是PDF),并将它们与一些元数据一起存储在页面上。

如果有更改,页面会自动激活。我们在复制日志和调度程序中看到复制事件,并记录了invalidate事件。但是没有驱逐条目,旧的二进制文件仍然被缓存。

我们在二进制文件的这些容器页面旁边也有HTML页面,它们按预期工作。这里是成功的html和不成功的PDF的两个日志条目:

行:

[Thu Jul 03 09:26:33 2014] [D] [27635(24)] Found farm website for localhost:81 
[Thu Jul 03 09:26:33 2014] [D] [27635(24)] checking [/dispatcher/invalidate.cache] 
[Thu Jul 03 09:26:33 2014] [I] [27635(24)] Activation detected: action=Activate [/content/offering/s2p/en/offerings/documents/Swiss_Mandate_Line/Review/test] 
[Thu Jul 03 09:26:33 2014] [I] [27635(24)] Touched /app/C2Z/dyn/c2zcqdis/docroot/.stat 
[Thu Jul 03 09:26:33 2014] [I] [27635(24)] Evicted /app/C2Z/dyn/c2zcqdis/docroot/content/offering/s2p/en/offerings/documents/Swiss_Mandate_Line/Review/test.html 
[Thu Jul 03 09:26:33 2014] [D] [27635(24)] response.status = 200 
[Thu Jul 03 09:26:33 2014] [D] [27635(24)] response.headers[Server] = "Communique/2.6.3 (build 5221)" 
[Thu Jul 03 09:26:33 2014] [D] [27635(24)] response.headers[Content-Type] = "text/html" 
[Thu Jul 03 09:26:33 2014] [D] [27635(24)] cache flushed 
[Thu Jul 03 09:26:33 2014] [I] [27635(24)] "GET /dispatcher/invalidate.cache" 200 13 2ms

不行

[Thu Jul 03 09:30:45 2014] [D] [27635(24)] Found farm website for localhost:81 
[Thu Jul 03 09:30:45 2014] [D] [27635(24)] checking [/dispatcher/invalidate.cache] 
[Thu Jul 03 09:30:45 2014] [I] [27635(24)] Activation detected: action=Activate [/content/offering/s2p/en/offerings/documents/Swiss_Mandate_Line/Review/as2p_vvm_ch_gl_fix_chf__pdf] 
[Thu Jul 03 09:30:45 2014] [I] [27635(24)] Touched /app/C2Z/dyn/c2zcqdis/docroot/.stat 
[Thu Jul 03 09:30:45 2014] [D] [27635(24)] response.status = 200 
[Thu Jul 03 09:30:45 2014] [D] [27635(24)] response.headers[Server] = "Communique/2.6.3 (build 5221)" 
[Thu Jul 03 09:30:45 2014] [D] [27635(24)] response.headers[Content-Type] = "text/html" 
[Thu Jul 03 09:30:45 2014] [D] [27635(24)] cache flushed 
[Thu Jul 03 09:30:45 2014] [I] [27635(24)] "GET /dispatcher/invalidate.cache" 200 13 1ms

这种情况下的PDF存储在jcr:content节点正下方名为“download”的节点中。它的html容器永远不会直接调用,这在调度程序中不可用。所以用户直接请求文件: /content/offering/s2p/en/offerings/documents/Swiss_Mandate_Line/Review/as2p_vvm_ch_gl_fix_chf__pdf/jcr%3acontent/download/file.res/as2p_vvm_ch_gl_fix_chf_.pdf

在dispatcher.any中,我们在激活时刷新所有html页面,但不在二进制文件中刷新。为了测试,我们添加了允许* .pdf ,但这无论如何都没有用。

/invalidate
{
/0000
  {
  /glob "*"
  /type "deny"
  }
/0001
  {
  /glob "*.html"
  /type "allow"
  }
}

在我看来,invalidate调用应该只删除整个文件夹: /content/offering/s2p/en/offerings/documents/Swiss_Mandate_Line/Review/as2p_vvm_ch_gl_fix_chf__pdf

为什么我们的二进制文件没有被刷新的任何想法?

更新:在另一篇文章中,提到了dispatcher.any中的statfileslevel属性。在我们的环境中,这被注释掉了。难道这可能是问题所在。可悲的是,我并不完全明白这是如何工作的。该级别是指wwwroot还是来自激活的页面?

2 个答案:

答案 0 :(得分:2)

调度程序刷新的问题似乎是文件服务的路径在使用jcr%3acontent时使用_jcr_content

Dispatcher flushing删除正在刷新的路径下的文件夹_jcr_content。它不会删除jcr%3acontent(urldecoded as jcr:content)。所以你应该使用这个URL来提供pdf: /content/offering/s2p/en/offerings/documents/Swiss_Mandate_Line/Review/as2p_vvm_ch_gl_fix_chf__pdf/_jcr_content/download/file.res/as2p_vvm_ch_gl_fix_chf_.pdf

然后将缓存pdf文件: {CACHEROOT}/content/offering/s2p/en/offerings/documents/Swiss_Mandate_Line/Review/as2p_vvm_ch_gl_fix_chf__pdf/_jcr_content/download/file.res/as2p_vvm_ch_gl_fix_chf_.pdf

然后,当刷新此路径时,它将删除刷新路径下的子目录_jcr_content /content/offering/s2p/en/offerings/documents/Swiss_Mandate_Line/Review/as2p_vvm_ch_gl_fix_chf__pdf

要详细说明,当您对上面的路径发出刷新请求时,将删除以下文件和目录:

  • /content/offering/s2p/en/offerings/documents/Swiss_Mandate_Line/Review/as2p_vvm_ch_gl_fix_chf__pdf.*其中*是通配符
  • /content/offering/s2p/en/offerings/documents/Swiss_Mandate_Line/Review/as2p_vvm_ch_gl_fix_chf__pdf/_jcr_content

有关冲洗如何工作的详细信息,请参阅本演示文稿中的幻灯片23: http://www.slideshare.net/andrewmkhoury/aem-cq-dispatcher-caching-webinar-2013

答案 1 :(得分:0)

不确定这是否是根本原因,但我怀疑你可能需要做的是去localhost:4503 / etc / replication / agents.publish.html(注意,这是一个发布实例,你可以在作者上进行并复制复制代理等,但为了POC的目的,只需直接在发布者上进行。)

然后转到您的调度员清除代理,然后单击编辑设置。

转到触发器面板。

确保选中“On Receive”触发器。这样做是为了启用链复制,这意味着当直接资产被发布时,它会直接从调度程序中删除,导致下一个请求失败,从而从调度程序中提取新的副本。

请注意,这种刷新与统计文件级别刷新不同,后者仅刷新目录,而不是资产的完全限定路径。


顺便说一下,它不是stats文件级别。如果已注释掉,则默认情况下的统计信息文件级别为0,这会使下面的任何内容无效。您似乎正在寻找的是主动删除缓存。这是可能的,因为Dave刚刚向我概述了这篇文章中一个不相关的问题: Is it possible to recursively flush directories in the CQ5/AEM apache dispatcher?

一种方法是创建一个刷新拦截器。基本上是发布者的自定义servlet。然后你要做的是配置普通的flush replicator来调用发布者的本地servlet。

然后,servlet会检测是否需要删除目录或其中的任何特定文件。它可以将刷新路径转换为所需的路径,而不是FLUSH操作,使用DELETE操作。

将刷新发送到正常的调度程序位置仍然非常重要。

希望这有帮助。

相关问题