Когда должен обновляться поисковый индекс галереи NuGet?

Недавно я установил локальную галерею NuGet по инструкциям на GitHub.

Кажется, он работает правильно, когда я загружаю пакеты через пользовательский интерфейс, но пакеты, отправленные с помощью командной строки, не отображаются в результатах поиска. В окнах пакетов написано «Последнее обновление поискового индекса 55 минут назад». Это соответствует тому, когда я последний раз публиковал веб-сайт. Что определяет, когда запускается поисковый индекс? При беглом взгляде на код кажется, что это должно происходить всякий раз, когда вы добавляете/удаляете пакет, но, похоже, этого не происходит.

Как увеличить частоту индексации?


person infojolt    schedule 12.11.2014    source источник


Ответы (1)


В проекте NuGetGallery перейдите к методу CreatePackageInternal в /Controllers/ApiController и вызовите эту строку перед оператором return.

IndexingService.UpdateIndex(true);

Ваш код должен быть примерно таким

    private async Task<ActionResult> CreatePackageInternal()
    {
        // Get the user
        var user = GetCurrentUser();

        using (var packageToPush = ReadPackageFromRequest())
        {
            if (packageToPush.Metadata.MinClientVersion > typeof(Manifest).Assembly.GetName().Version)
            {
                return new HttpStatusCodeWithBodyResult(HttpStatusCode.BadRequest, String.Format(
                    CultureInfo.CurrentCulture,
                    Strings.UploadPackage_MinClientVersionOutOfRange,
                    packageToPush.Metadata.MinClientVersion));
            }

            // Ensure that the user can push packages for this partialId.
            var packageRegistration = PackageService.FindPackageRegistrationById(packageToPush.Metadata.Id);
            if (packageRegistration != null)
            {
                if (!packageRegistration.IsOwner(user))
                {
                    return new HttpStatusCodeWithBodyResult(HttpStatusCode.Forbidden, Strings.ApiKeyNotAuthorized);
                }

                // Check if a particular Id-Version combination already exists. We eventually need to remove this check.
                string normalizedVersion = packageToPush.Metadata.Version.ToNormalizedString();
                bool packageExists =
                    packageRegistration.Packages.Any(
                        p => String.Equals(
                            p.NormalizedVersion,
                            normalizedVersion,
                            StringComparison.OrdinalIgnoreCase));

                if (packageExists)
                {
                    return new HttpStatusCodeWithBodyResult(
                        HttpStatusCode.Conflict,
                        String.Format(CultureInfo.CurrentCulture, Strings.PackageExistsAndCannotBeModified,
                                      packageToPush.Metadata.Id, packageToPush.Metadata.Version.ToNormalizedStringSafe()));
                }
            }

            var package = PackageService.CreatePackage(packageToPush, user, commitChanges: false);
            AutoCuratePackage.Execute(package, packageToPush, commitChanges: false);
            EntitiesContext.SaveChanges();

            using (Stream uploadStream = packageToPush.GetStream())
            {
                await PackageFileService.SavePackageFileAsync(package, uploadStream);
            }
        }

        IndexingService.UpdateIndex(true);

        return new HttpStatusCodeResult(HttpStatusCode.Created);
    }
person Nico Vega    schedule 16.01.2015