Score:1

คำสั่ง drush ของ Batch 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

นี่คือรหัสของฉัน ฉันทำอะไรผิดหรือเปล่า ขอบคุณสำหรับความช่วยเหลือของคุณ:

class Drush9CustomCommands ขยาย DrushCommands {

  ใช้ StringTranslationTrait;
  ส่วนตัว $entityTypeManager;
  ป้องกัน $logger;
  ป้องกัน $batchService;
  
  ฟังก์ชันสาธารณะ __construct (EntityTypeManagerInterface $entityTypeManager, LoggerInterface $logger, BatchService $batch_service) {
    ผู้ปกครอง :: __ สร้าง ();
    $this->entityTypeManager = $entityTypeManager;
    $this->logger = $logger;
    $this->batchService = $batch_service;
  }

  /**
   * ปรับปรุงโหนด
   *
   * @command ปรับปรุง:โหนด
   * @นามแฝง update-node
   *
   * อัปเดต @usage:node foo
   * foo คือประเภทของโหนดที่จะอัปเดต
   */
  ฟังก์ชั่นสาธารณะ updateNode () {

    $batch = อาร์เรย์ (
      'title' => t('กำลังส่งออก'),
      'การดำเนินการ' => อาร์เรย์ (
        อาร์เรย์ ([$ this->batchService, 'processMyNode'], อาร์เรย์ ()),
      ),
      'เสร็จสิ้น' => [$this->batchService,'processMyNodeFinished'],
    );
    batch_set($แบทช์);

    drush_backend_batch_process();
  }
}

Batchservice.php

class BatchService ใช้ ContainerInjectionInterface {

  ใช้ StringTranslationTrait;
  ป้องกัน $messenger;

  ฟังก์ชั่นสาธารณะ __construct (MessengerInterface $messenger) {
    $this->messenger = $สาร;
  }

  /**
   * {@inheritDoc}
   */
  สร้างฟังก์ชันคงที่สาธารณะ (ContainerInterface $container) {
    ส่งคืนค่าคงที่ใหม่ (
      $container->get('ผู้ส่งสาร')
    );
  }

  /**
   * การเรียกกลับกระบวนการแบทช์
   *
   * @param int $id
   * รหัสของแบทช์
   * @param สตริง $operation_details
   * รายละเอียดของการดำเนินการ
   * @param วัตถุ $context
   * บริบทสำหรับการดำเนินงาน
   */
  กระบวนการฟังก์ชั่นสาธารณะ MyNode ( & $ บริบท) {
    ถ้า (!isset($context['sandbox']['total'])) {
      // รับรหัสประสบการณ์โหนด
      $query = \Drupal::entityTypeManager()->getStorage('โหนด')->getQuery();
      $nids = $แบบสอบถาม
        ->เงื่อนไข ('ประเภท', 'mynode')
        -> ช่วง (0,1000)
        -> การเข้าถึงตรวจสอบ (เท็จ)
        ->ดำเนินการ ();

      $context['sandbox']['total'] = จำนวน($nids);
      $context['sandbox']['node_ids'] = $nids;
      $context['sandbox']['ปัจจุบัน'] = 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', 'ค่าฟิลด์ของฉัน');
      $node->save();
    }

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

    \Drupal::logger('test')->notice($context['sandbox']['current'] . ' ประสบการณ์ที่ผ่านไป / ' . $context['sandbox']['total']);

    ถ้า ($context['sandbox']['total'] == 0) {
      $context['sandbox']['#finished'] = 1;
    }
    อื่น {

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

  /**
   * ชุดโทรกลับเสร็จแล้ว
   *
   * @param บูล $success
   * ความสำเร็จของการดำเนินการ
   * @param อาร์เรย์ $results
   * อาร์เรย์ของผลลัพธ์สำหรับการประมวลผลภายหลัง
   * @param อาร์เรย์ $operations
   * อาร์เรย์ของการดำเนินงาน
   */
  ฟังก์ชั่นสาธารณะ processMyNodeFinished($success, array $results, array $operations) {

    ถ้า ($ สำเร็จ) {
      $message = \Drupal::translation()->formatPlural(count($results), 'หนึ่งโพสต์ที่ประมวลผลแล้ว', '@count โพสต์ที่ประมวลผลแล้ว');
    }
    อื่น {
      $message = t('เสร็จสิ้นโดยมีข้อผิดพลาด');
    }
    \Drupal::logger('teset')->notice($message);
  }

}
Score:2
ธง ve

การเพิ่มคำตอบของ @ cilefen มีข้อผิดพลาดในรหัส: มันควรจะเป็น $context['finished'] แทน $context['sandbox']['#finished'] หลังจากแก้ไขแล้ว ชุดงานก็ทำงานสำเร็จ

Score:1
ธง id

โมดูล Search API Solr ไม่สามารถเชื่อมต่อกับอินสแตนซ์เซิร์ฟเวอร์ Solr ที่กำหนดค่าไว้ในแต่ละครั้งที่สคริปต์บันทึกโหนด อินสแตนซ์ Solr ที่กำหนดค่าคือ http://solr:8983/ คุณต้องกำหนดค่าอินสแตนซ์ที่สามารถเข้าถึงได้

jacksparrow avatar
ve flag
ขอบคุณ @cilefen ฉันเพิ่งกำหนดค่า solr คุณพูดถูก ไม่มีคอร์ แต่แบทช์ของฉันยังคงทำงานเพียงครั้งเดียวแล้วหยุด ไม่มีข้อผิดพลาด ไม่มีอะไร.. ฟังก์ชันทั้งสองของฉันผิดหรือเปล่า
id flag
นั่นเป็นคำถามใหม่ โปรดยอมรับคำตอบของฉันและถามคนอื่น
jacksparrow avatar
ve flag
I already did it, thanks for your help!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา