Рейтинг:1

Команда drush пакетного API запускается один раз, а затем показывает ошибку Solr

флаг ve

Я пытаюсь создать команду drush для запуска пакетного процесса. Когда я запускаю команду, пакет запускается только один раз, и я получаю эту ошибку:

в Drupal\search_api_solr\SolrConnector\SolrConnectorPluginBase->handleHttpException() (строка 1026 из /var/www/html/web/modules/contrib/search_api_solr/src/SolrConnector/SolrConnectorPluginBase.php). Drupal\search_api_solr\SearchApiSolrException: конечная точка Solr http://solr:8983/ не найден (код: 404

Это мой код, я что-то не так делаю? Спасибо за вашу помощь:

класс Drush9CustomCommands расширяет DrushCommands {

  использовать StringTranslationTrait;
  частный $entityTypeManager;
  защищенный регистратор $;
  защищенный $batchService;
  
  общедоступная функция __construct (EntityTypeManagerInterface $entityTypeManager, LoggerInterface $logger, BatchService $batch_service) {
    родитель::__construct();
    $this->entityTypeManager = $entityTypeManager;
    $this->logger = $logger;
    $this->batchService = $batch_service;
  }

  /**
   * Обновление узла.
   *
   * @command update:узел
   * @aliases update-node
   *
   * Обновление @usage: узел foo
   * foo — тип узла для обновления
   */
  общедоступная функция updateNode() {

    $ пакет = массив (
      'title' => t('Экспорт'),
      'операции' => массив(
        массив([$this->batchService,'processMyNode'], массив()),
      ),
      'finished' => [$this->batchService,'processMyNodeFinished'],
    );
    пакет_набор ($ пакет);

    drush_backend_batch_process();
  }
}

Batchservice.php

класс BatchService реализует ContainerInjectionInterface {

  использовать StringTranslationTrait;
  защищенный $мессенджер;

  публичная функция __construct (MessengerInterface $ messenger) {
    $this->messenger = $messenger;
  }

  /**
   * {@inheritDoc}
   */
  общедоступная статическая функция create(ContainerInterface $container) {
    вернуть новую статику(
      $контейнер->получить('мессенджер')
    );
  }

  /**
   * Пакетный обратный вызов процесса.
   *
   * @param int $id
   * Идентификатор партии.
   * @param строка $operation_details
   * Подробности операции.
   * @param объект $context
   * Контекст для операций.
   */
  публичная функция processMyNode( &$context) {
    если (!isset($context['sandbox']['total'])) {
      // Получить идентификаторы опыта узла.
      $query = \Drupal::entityTypeManager()->getStorage('node')->getQuery();
      $ниды = $запрос
        ->условие('тип', 'мойузел')
        -> диапазон (0,1000)
        ->Проверка доступа(ЛОЖЬ)
        ->выполнить();

      $context['sandbox']['total'] = count($nids);
      $context['sandbox']['node_ids'] = $nids;
      $context['sandbox']['current'] = 0;
    }
    $node_ids = array_slice($context['sandbox']['node_ids'], $context['sandbox']['current'], 25);

    foreach ($node_ids как $nid) {
      $node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
      $node->set('field_my_field', 'значение моего поля');
      $узел->сохранить();
    }

    $context['sandbox']['current'] += count($node_ids);

    \Drupal::logger('test')->notice($context['sandbox']['current']. ' Пройденный опыт / ' . $context['sandbox']['total']);

    если ($context['песочница']['всего'] == 0) {
      $context['песочница']['#finished'] = 1;
    }
    еще {

      $context['sandbox']['#finished'] = ($context['sandbox']['current'] / $context['sandbox']['total']);
    }
  }

  /**
   * Пакетный обратный вызов.
   *
   * @param bool $успех
   * Успех операции.
   * @param массив $результатов
   * Массив результатов для постобработки.
   * @param массив $операций
   * Массив операций.
   */
  общедоступная функция processMyNodeFinished ($ успех, массив $ результатов, массив $ операций) {

    если ($ успех) {
      $message = \Drupal::translation()->formatPlural(count($results), 'Обработано одно сообщение.', 'Обработано сообщений @count.');
    }
    еще {
      $message = t('Завершено с ошибкой.');
    }
    \Drupal::logger('teset')->notice($message);
  }

}
Рейтинг:2
флаг ve

В дополнение к ответу @cilefen в коде была ошибка: это должно быть $context['finished'] вместо $context['sandbox']['#finished']. После этого пакетная обработка успешно выполнялась.

Рейтинг:1
флаг id

Модуль Search API Solr не может подключаться к настроенному экземпляру сервера Solr каждый раз, когда сценарий сохраняет узел. Настроенный экземпляр Solr — http://solr:8983/. Вы должны настроить доступный экземпляр.

jacksparrow avatar
флаг ve
Спасибо @cilefen, я только что настроил solr, вы были правы, ядра не было, однако мой пакет все еще запускается один раз, затем останавливается, никаких ошибок, ничего ... мои две функции неверны?
флаг id
Это новый вопрос. Пожалуйста, примите мой ответ и спросите другой.
jacksparrow avatar
флаг ve
Я уже сделал это, спасибо за вашу помощь!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.