ฉันกำลังพยายามสร้างคำสั่ง 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);
}
}