Я пытаюсь создать команду 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);
}
}