Collections 使用计划任务更新Coldfusion solr集合

Collections 使用计划任务更新Coldfusion solr集合,collections,solr,coldfusion,scheduled-tasks,Collections,Solr,Coldfusion,Scheduled Tasks,因此,我对使用Coldfusion solr搜索(刚刚从一个CF8 Mac OS X服务器移动到一个Linux CF9服务器)非常陌生,我想知道处理自动更新集合的最佳方法是什么。我知道计划的任务就是为了这个,但我还没有在网上找到任何例子 我目前有一个计划任务,通过获取集合列表并在循环中使用cfindex标记来运行refresh命令,每周更新所有集合。不过,这是一个相当密集的处理过程,更新到目前为止我设置的四个集合大约需要十分钟。当我在浏览器中运行它时,这会起作用,但当我从“计划任务管理”页面运行

因此,我对使用Coldfusion solr搜索(刚刚从一个CF8 Mac OS X服务器移动到一个Linux CF9服务器)非常陌生,我想知道处理自动更新集合的最佳方法是什么。我知道计划的任务就是为了这个,但我还没有在网上找到任何例子

我目前有一个计划任务,通过获取集合列表并在循环中使用cfindex标记来运行refresh命令,每周更新所有集合。不过,这是一个相当密集的处理过程,更新到目前为止我设置的四个集合大约需要十分钟。当我在浏览器中运行它时,这会起作用,但当我从“计划任务管理”页面运行任务时,会出现以下错误:“请求已超过允许的时间限制标记:CFLOOP”

有没有更好的方法来处理集合的更新?如果我单独更新每个集合,会更好吗

这是我的更新代码

<cfsetting requesttimeout="1800">

<cfcollection action="list" name="collections" engine="solr">

<cfloop query="collections">
    <cfindex collection="#name#" action="refresh" extensions=".pdf, .html, .htm, .cfml, .cfm" type="path" key="/home/#name#/public_html/" recurse="yes">
</cfloop>

在早期版本的ColdFusion中,有一个URL参数可以在任何HTTP请求中传递,以更改请求页面的服务器超时时间。您可能已经从计划任务配置中猜到,有一个HTTP请求正在运行您的任务,因此它的功能与任何其他页面一样。在这些早期版本中,您只需将
&requesttimeout=900
添加到URL中,这就给了服务器15分钟的时间来处理该任务

在以后的版本中,他们意识到此URL参数存在安全风险,但他们需要一种方法,允许开发人员声明单个HTTP请求的时间仍应超过ColdFusion Administrator中设置的默认页面超时时间。因此,他们将其从URL参数移动到
标记

 <cfsetting requesttimeout="900" />

您需要将cfsetting标记放在页面顶部,而不是放在循环中,因为它重置了从请求开始到最后一个cfsetting标记的总允许时间。Ben Nadel在这里写了一篇博客文章:

我不确定请求超时是否有上限。我确实知道,在过去,当我有一个长时间运行的任务时,服务器逐渐变慢,在某些情况下,直到崩溃。我不确定我是否会期望对Solr集合重新编制索引会如此严重地降低性能,我认为我的任务正在做一些其他事情,这些事情当时可能会占用内存。无论如何,如果您遇到这个问题,您可能需要为每个集合将其划分为单独的任务,并确保任务之间有足够的时间,以便在下一个任务开始之前完成每个任务

编辑:哎呀!我不知道我怎么会错过原来问题中的
cf设置
标记。哦!在任何情况下,当您通过CF管理员执行计划任务时,它会执行
cfhttp
请求以执行任务。这是通常执行计划任务的方式,我怀疑这是为了使任务可以在您自己的应用程序范围内执行,但其效果是有两个单独的请求正在执行。我认为CFIDE页面中没有
cfsetting
标记,但我怀疑如果用户希望让该页面等待任务完成的时间更长,可以添加一个标记


编辑:好的,如果您想在CFIDE中添加
cf设置
,您首先需要解密模板,然后添加一行代码。。。这可能会使您在服务器上的保修失效,但可能并不危险。;)有关解密模板的信息,请参见:-要编辑的模板是
/CFIDE/administrator/scheduletasks/scheduletasks.cfm

,我不知道还有更好的方法。就从管理页面运行时的超时而言,这是一个良性错误。超时实际上是管理页面,而不是计划的任务。发生这种情况的原因是管理页面试图等待计划任务完成,并且有一个与页面请求超时(在您的情况下还有cfsetting请求超时)不同的超时。如果您在代码中添加一些日志记录到文件中,您将看到作业实际上继续运行。很酷,谢谢您清除这些。我只是想确定我是以正确的方式进行的。谢谢你的回复。我的循环上方确实有cfsetting标记,它确实增加了页面完成处理所需的时间。唯一一次它似乎不起作用是在Coldfusion管理员中,您可以在那里测试计划的任务。Miguel-F指出,Scheduled Task admin页面有自己的页面超时设置,该设置会忽略它试图测试的文件中设置的内容。因此,页面基本上可以超时,但它正在测试的进程继续在后台运行。我也很好奇请求超时设置是否有上限,但我没有必要去发现。嘿,很抱歉。。。我不知道当我第一次读到你的问题时我怎么会错过这个。哦!实际上,并不是CF Admin页面忽略了超时请求,而是它们是独立的请求。当您测试计划任务时,CF Admin页面会执行一个
cfhttp
请求,就像计划任务正常执行时服务器会执行一个请求一样。我猜他们是这样做的,这样安排的任务就可以在您自己的应用程序范围内执行,但效果是不同的请求。不过,您可以在cfide页面中添加requesttimeout。不用担心,这不是个坏主意。虽然我太担心了。我很高兴知道我的任务按计划进行,这是可以理解的。感谢您选择答案。:)