Puncte:1

Comanda batch API drush rulează o dată, apoi arată eroarea Solr

drapel ve

Î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);
  }

}
Puncte:2
drapel ve

Adăugând la răspunsul lui @cilefen, a existat o eroare în cod: ar trebui să fie $context['finished'] în loc de $context['sandbox']['#finished'].După modificarea acesteia, lotul rula cu succes.

Puncte:1
drapel id

Modulul Solr API de căutare nu se poate conecta la instanța de server Solr configurată de fiecare dată când scriptul salvează un nod. Instanța Solr configurată este http://solr:8983/. Trebuie să configurați o instanță accesibilă.

jacksparrow avatar
drapel ve
Mulțumesc @cilefen, tocmai am configurat solr-ul, ai avut dreptate, nu au existat nuclee, totuși lotul meu încă rulează o dată, apoi se oprește, nicio eroare, nimic... sunt greșite cele două funcții ale mele?
drapel id
Aceasta este o întrebare nouă. Vă rog să acceptați răspunsul meu și să întrebați pe altul.
jacksparrow avatar
drapel ve
Am făcut-o deja, mulțumesc pentru ajutor!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.