Umbraco V6.1.3 Lucene Index Corruption
Просто обновил сайт Umbraco V6.1.1 до V6.1.3. Все прошло хорошо на моей рабочей станции. Скопировал файлы на веб-сервер, после удаления всего, что было, проделал тоже самое с базой данных. Установить все разрешения каталога и запустить сайт. Сайт (который является MVC) работает НО с двумя проблемами, которые я не могу понять, и был бы очень признателен за помощь.
Ошибка одной страницы с ошибкой Read Past EOF. Это представление, которое он пытается запустить. Ошибка по ссылке, выделенной жирным шрифтом.
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
Layout = "BasePage.cshtml";
}
<div class="row-fluid">
<div class="span12">
<h1>@Umbraco.Field("pageName")</h1>
@Umbraco.Field("pageText")
</div>
</div>
<div class="row-fluid">
<div class="span12">
@foreach (var page in Model.Content.Children) {
<section class="well">
<h3>@page.Name</h3>
@if(page.Children.Count() > 0) {
<ul>
**@foreach (var pub in page.Children) {**
<li><a href="@Umbraco.Media(pub.GetPropertyValue("publication")).Url" title="@pub.Name" target="_blank">@pub.Name</a></li>
}
</ul>
}
</section>
}
</div>
</div>
Трассировка стека
[IOException: read past EOF]
Lucene.Net.Index.FindSegmentsFile.Run(IndexCommit commit) +2040
Lucene.Net.Index.DirectoryReader.Open(Directory directory, IndexDeletionPolicy deletionPolicy, IndexCommit commit, Boolean readOnly, Int32 termInfosIndexDivisor) +57
Lucene.Net.Search.IndexSearcher..ctor(Directory path, Boolean readOnly) +29
Examine.LuceneEngine.Providers.LuceneSearcher.ValidateSearcher(Boolean forceReopen) +136
Другая (я думаю, что связанная с этим проблема) находится в CMS, при открытии раздела для разработчиков я получаю предупреждение javascript с огромным сообщением об ошибке, касающимся Lucene
error: {"Message":"An error has occurred.","ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.","ExceptionType":"System.InvalidOperationException","StackTrace":null,"InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Could not create an index searcher with the supplied lucene directory","ExceptionType":"System.ApplicationException","StackTrace":" at Examine.LuceneEngine.Providers.LuceneSearcher.ValidateSearcher(Boolean forceReopen)\r\n at Examine.LuceneEngine.Providers.LuceneSearcher.GetSearcher()\r\n at Umbraco.Web.Search.ExamineExtensions.GetIndexReaderForSearcher(BaseLuceneSearcher searcher)\r\n at Umbraco.Web.Search.ExamineExtensions.GetIndexDocumentCount(LuceneIndexer indexer)\r\n at Umbraco.Web.WebServices.ExamineManagementApiController.CreateModel(BaseIndexProvider indexer)\r\n at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()\r\n at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)\r\n at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)\r\n at Newtonsoft.Json.Serialization.JsonArrayContract.CreateWrapper(Object list)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value)\r\n at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value)\r\n at System.Net.Http.Formatting.JsonMediaTypeFormatter.<>c__DisplayClassd.<WriteToStreamAsync>b__c()\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)","InnerException":{"Message":"An error has occurred.","ExceptionMessage":"read past EOF","ExceptionType":"System.IO.IOException","StackTrace":" at Lucene.Net.Index.SegmentInfos.FindSegmentsFile.Run(IndexCommit commit)\r\n at Lucene.Net.Index.DirectoryReader.Open(Directory directory, IndexDeletionPolicy deletionPolicy, IndexCommit commit, Boolean readOnly, Int32 termInfosIndexDivisor)\r\n at Lucene.Net.Search.IndexSearcher..ctor(Directory path, Boolean readOnly)\r\n at Examine.LuceneEngine.Providers.LuceneSearcher.ValidateSearcher(Boolean forceReopen)"}}}
Попробовал форум Umbraco, но не получил ответов. Если это не сложно, мне все равно нужно знать, конечно.
Любой совет будет принята с благодарностью.
1 ответ
Я бы сделал резервную копию индексов (они находятся в app_data\temp\....), удалил их и перезапустил пул приложений.
Umbraco восстановит их (может потребоваться 5-10 минут для ОГРОМНОЙ базы данных - 150 тыс. Узлов) при следующем запуске.
Это может быть поврежденный индекс (в этом случае взять резервную копию и использовать на ней Luke, посмотреть, не поврежден ли он) или, возможно, что версия индекса изменилась - это тот же результат.