2014-01-14 6 views
3

Итак, я довольно новичок в использовании поиска solr Coldfusion (только что перешел с сервера CF8 Mac OS X на сервер Linux CF9), и мне интересно, какой лучший способ обрабатывать автоматическое обновление коллекций. Я знаю, что запланированные задачи предназначены для этого, но я не смог найти примеры в Интернете.Обновление коллекций solr Coldfusion с запланированной задачей

В настоящее время у меня запланированная задача, настроенная для обновления всех коллекций в неделю путем получения списка коллекций и использования тега cfindex в цикле для запуска команды обновления. Это довольно интенсивный процесс обработки и занимает около десяти минут, чтобы обновить четыре коллекции, которые я создал до сих пор. Это работает, когда я запускаю его в браузере, но я получаю эту ошибку: «Когда я запускаю задачу с запланированной страницы администрирования задачи,« запрос превысил допустимый временный лимит «Тег: 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> 
+2

Я не знаю, что есть лучший способ сделать это. Что касается вашего тайм-аута при запуске со страницы администрирования, это является доброкачественной ошибкой. Тайм-аут - это фактически страница администрирования, а не запланированная задача. Это происходит потому, что страница администратора пытается дождаться завершения запланированной задачи и имеет отдельный тайм-аут, чем таймаут запроса страницы (и в вашем случае тайм-аут запроса cfsetting). Если вы добавите некоторые записи в файл в своем коде, вы увидите, что работа действительно продолжает работать. –

+0

Прохладный, спасибо за очистку. Я просто хотел быть уверенным, что я собираюсь сделать это правильно. –

ответ

1

В более ранних версиях ColdFusion был параметр URL, который может быть передан на любой запрос HTTP, чтобы изменить время ожидания сервера для запрашиваемой страницы. Возможно, вы предположили из запланированной конфигурации задачи, что HTTP-запрос запускает вашу задачу, поэтому он функционирует так же, как и любая другая страница. В тех ранних версиях вы бы только добавили &requesttimeout=900 к URL-адресу, и это дало серверу 15 минут для обработки этой задачи.

В более поздних версиях они поняли, что этот параметр URL-адреса является угрозой безопасности, но им нужен способ разрешить разработчикам объявлять, что отдельному HTTP-запросу все равно будет разрешено занятие дольше, чем таймаут по умолчанию, установленный в администраторе ColdFusion. Поэтому они переместили его из параметра URL в тег <cfsetting>.

<cfsetting requesttimeout="900" /> 

Вы должны поместить cfsetting тег в верхней части страницы, а не помещать его внутри цикла, потому что это сброс общего допустимого времени от начала запроса, а не только с момента последнего cfsetting тега , Бен Надель написал статью в блоге об этом здесь: http://www.bennadel.com/blog/626-CFSetting-RequestTimeout-Updates-Timeouts-It-Does-Not-Set-Them.htm

Я не уверен, есть ли верхний предел времени ожидания запроса. Я действительно знаю, что в прошлом, когда у меня была очень долгая задача, сервер постепенно замедлился, в некоторых случаях, пока он не разбился. Я не уверен, что я ожидал бы переиндексации коллекций Solr, чтобы ухудшить производительность настолько плохо, я думаю, что мои задачи занимались некоторыми другими вещами, которые, вероятно, были в то время забиты памятью. В любом случае, если вы столкнетесь с этой проблемой, вам может понадобиться разделить ее на отдельные задачи для каждой коллекции и просто убедиться, что между задачами достаточно времени, чтобы каждый из них мог выполнить до следующего запуска.

EDIT: Ой! Я не знаю, как я пропустил тег cfsetting в исходном вопросе. D'о! В любом случае, когда вы выполняете запланированное задание с помощью CF-администратора, он выполняет запрос cfhttp для выполнения задачи. Так обычно выполняются запланированные задачи, и я подозреваю, что задача может выполняться внутри вашей собственной области приложения, но эффект заключается в том, что выполняются два отдельных запроса. Я не думаю, что на странице CFIDE есть тег cfsetting, но я подозреваю, что человек может добавить его, если они захотят дольше дождаться завершения этой задачи.

EDIT: Хорошо, если вы хотите добавить cfsetting в CFIDE, вам сначала нужно расшифровать шаблон, а затем добавить свою одну строку кода ..., которая может аннулировать вашу гарантию на сервере, но, вероятно, безопасно.;) Для дешифрования шаблона см.: Can I get the source of a hacked Coldfusion template? - и шаблон для редактирования: /CFIDE/administrator/scheduler/scheduletasks.cfm.

+0

Спасибо за ваш ответ. У меня есть тег cfsetting выше моего цикла, и он добавляет необходимое время, необходимое для завершения обработки страницы. Единственный раз, когда он не работал, был в администраторе Coldfusion, где вы можете проверить запланированную задачу. Miguel-F отметил, что на странице администрирования запланированной задачи есть собственный параметр таймаута страницы, который игнорирует то, что установлено в файле, который он пытается проверить. По сути, эта страница может время от времени, но процесс, который он тестирует, продолжает работать в фоновом режиме. –

+0

Мне также интересно, есть ли верхний предел для тайм-аута запроса, но мне не нужно было выяснять. –

+0

Эй, извините за это ... Я не знаю, как я пропустил это, когда впервые прочитал ваш вопрос. D'о! На самом деле, страница CF Admin игнорирует запрос тайм-аута, а скорее, что это отдельные запросы. Страница CF Admin выполняет запрос 'cfhttp', когда вы проверяете запланированную задачу, точно так же, как сервер будет выполнять ее, когда запланированное задание выполняется нормально. Я предполагаю, что они сделали это так, чтобы запланированная задача могла выполняться внутри вашей собственной области приложения, но эффект - это отдельные запросы. Вероятно, вы могли бы добавить время запроса на странице cfide. –

Смежные вопросы