Încerc să creez o comandă drush pentru a rula un proces batch. Când rulez comanda, lotul rulează o singură dată și primesc această eroare:
în
Drupal\search_api_solr\SolrConnector\SolrConnectorPluginBase->handleHttpException() (linia 1026 din
/var/www/html/web/modules/contrib/search_api_solr/src/SolrConnector/SolrConnectorPluginBase.php).
Drupal\search_api_solr\SearchApiSolrException: punctul final Solr
http://solr:8983/ nu a fost găsit (cod: 404
Acesta este codul meu, fac ceva greșit? Multumesc pentru ajutor:
clasa Drush9CustomCommands extinde DrushCommands {
utilizați StringTranslationTrait;
privat $entityTypeManager;
protejat $logger;
protejat $batchService;
funcția publică __construct(EntityTypeManagerInterface $entityTypeManager, LoggerInterface $logger, BatchService $batch_service) {
părinte::__construct();
$this->entityTypeManager = $entityTypeManager;
$acest->logger = $logger;
$this->batchService = $batch_service;
}
/**
* Actualizare Nod.
*
* @actualizare comanda:nod
* @aliases update-node
*
* Actualizare @usage: nod foo
* foo este tipul de nod de actualizat
*/
funcția publică updateNode() {
$lot = matrice(
'title' => t('Se exportă'),
'operațiuni' => matrice(
array([$this->batchService,'processMyNode'], array()),
),
'finished' => [$this->batchService,'processMyNodeFinished'],
);
set_loturi($lot);
drush_backend_batch_process();
}
}
Batchservice.php
clasa BatchService implementează ContainerInjectionInterface {
utilizați StringTranslationTrait;
protejat $messenger;
funcția publică __construct(MessengerInterface $messenger) {
$acest->mesager = $mesager;
}
/**
* {@inheritDoc}
*/
funcția publică statică create(ContainerInterface $container) {
returnează static nou (
$container->get('messenger')
);
}
/**
* Procesul de apel invers.
*
* @param int $id
* Id-ul lotului.
* @param șir $operation_details
* Detalii despre operațiune.
* @param obiect $context
* Contextul operațiunilor.
*/
funcția publică processMyNode(&$context) {
dacă (!isset($context['sandbox']['total'])) {
// Obține ID-urile experienței nodului.
$interogare = \Drupal::entityTypeManager()->getStorage('nod')->getQuery();
$nids = $interogare
->condition('tip', 'nodul meu')
->interval(0,1000)
->accessCheck(FALSE)
->execute();
$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 ca $nid) {
$nod = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
$nod->set('câmp_câmpul_meu', 'valoarea câmpului meu');
$nod->salvare();
}
$context['sandbox']['current'] += count($node_ids);
\Drupal::logger('test')->notice($context['sandbox']['current'] . 'Experiențe trecute / ' . $context['sandbox']['total']);
dacă ($context['sandbox']['total'] == 0) {
$context['sandbox']['#finished'] = 1;
}
else {
$context['sandbox']['#finished'] = ($context['sandbox']['current'] / $context['sandbox']['total']);
}
}
/**
* Loturi de apel invers finalizate.
*
* @param bool $succes
* Succesul operațiunii.
* @param array $rezultate
* Matrice de rezultate pentru post-procesare.
* @param array $operații
* Gamă de operațiuni.
*/
funcția publică processMyNodeFinished($succes, matrice $rezultate, matrice $operații) {
dacă ($succes) {
$message = \Drupal::translation()->formatPlural(count($results), 'One post processed.', '@count posts processed.');
}
else {
$message = t('S-a terminat cu o eroare.');
}
\Drupal::logger('teset')->notice($mesaj);
}
}