Điểm:1

Lệnh drush API hàng loạt chạy một lần sau đó hiển thị lỗi Solr

lá cờ ve

Tôi đang cố gắng tạo một lệnh drush để chạy một quy trình hàng loạt. Khi tôi chạy lệnh, lô chỉ chạy một lần và tôi gặp lỗi này:

Trong Drupal\search_api_solr\SolrConnector\SolrConnectorPluginBase->handleHttpException() (dòng 1026 của /var/www/html/web/modules/contrib/search_api_solr/src/SolrConnector/SolrConnectorPluginBase.php). Drupal\search_api_solr\SearchApiSolrException: Điểm cuối Solr http://solr:8983/ không tìm thấy (mã: 404

Đây là mã của tôi, tôi có làm gì sai không? Cảm ơn bạn đã giúp đỡ:

lớp Drush9CustomCommands mở rộng DrushCommands {

  sử dụng StringTranslationTrait;
  $entityTypeManager riêng tư;
  $logger được bảo vệ;
  $batchService được bảo vệ;
  
  chức năng công khai __construct(EntityTypeManagerInterface $entityTypeManager, LoggerInterface $logger, BatchService $batch_service) {
    cha mẹ::__construct();
    $this->entityTypeManager = $entityTypeManager;
    $this->logger = $logger;
    $this->batchService = $batch_service;
  }

  /**
   * Cập nhật nút.
   *
   * @command cập nhật: nút
   * Nút cập nhật @aliases
   *
   * cập nhật @usage: nút foo
   * foo là loại nút để cập nhật
   */
  cập nhật chức năng công khaiNode() {

    $batch = mảng (
      'tiêu đề' => t('Đang xuất'),
      'hoạt động' => mảng (
        mảng([$this->batchService,'processMyNode'], mảng()),
      ),
      'đã hoàn thành' => [$this->batchService,'processMyNodeFinished'],
    );
    batch_set($batch);

    drush_backend_batch_ process();
  }
}

Batchservice.php

lớp BatchService triển khai ContainerInjectionInterface {

  sử dụng StringTranslationTrait;
  $messenger được bảo vệ;

  hàm công khai __construct(MessengerInterface $messenger) {
    $this->messenger = $messenger;
  }

  /**
   * {@inheritDoc}
   */
  tạo hàm tĩnh công khai (ContainerInterface $container) {
    trả về tĩnh mới (
      $container->get('sứ giả')
    );
  }

  /**
   * Gọi lại quá trình hàng loạt.
   *
   * @param int $id
   * Id của lô.
   * Chuỗi @param $ operation_details
   * Chi tiết của hoạt động.
   * đối tượng @param $context
   * Bối cảnh cho các hoạt động.
   */
  chức năng công khai processMyNode( &$context) {
    if (!isset($context['sandbox']['total'])) {
      // Nhận id trải nghiệm nút.
      $query = \Drupal::entityTypeManager()->getStorage('node')->getQuery();
      $nids = $query
        -> điều kiện ('loại', 'mynode')
        -> phạm vi (0,1000)
        -> kiểm tra truy cập (SAI)
        ->thực thi();

      $context['sandbox']['total'] = đếm($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 là $nid) {
      $node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
      $node->set('field_my_field', 'giá trị trường của tôi');
      $node->save();
    }

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

    \Drupal::logger('test')->notice($context['sandbox']['current'] . ' Trải nghiệm đã qua / ' . $context['sandbox']['total']);

    if ($context['sandbox']['total'] == 0) {
      $context['sandbox']['#finished'] = 1;
    }
    khác {

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

  /**
   * Batch Xong gọi lại.
   *
   * @param bool $ thành công
   * Thành công của ca mổ.
   * @param mảng $results
   * Mảng kết quả để xử lý sau.
   * @param mảng hoạt động $
   * Mảng các phép toán.
   */
  hàm công khai processMyNodeFinished($success, mảng $results, mảng $operations) {

    nếu ($ thành công) {
      $message = \Drupal::translation()->formatPlural(count($results), 'Đã xử lý một bài đăng.', '@count bài đăng đã xử lý.');
    }
    khác {
      $message = t('Đã hoàn tất có lỗi.');
    }
    \Drupal::logger('teset')->notice($message);
  }

}
Điểm:2
lá cờ ve

Thêm vào câu trả lời của @ cilefen, đã xảy ra lỗi trong mã: nó phải là $context['finished'] thay vì $context['sandbox']['#finished']. Sau khi sửa đổi điều này, lô đã chạy thành công.

Điểm:1
lá cờ id

Mô-đun Solr API tìm kiếm không thể kết nối với phiên bản máy chủ Solr được định cấu hình mỗi khi tập lệnh lưu một nút. Phiên bản Solr được định cấu hình là http://solr:8983/. Bạn phải định cấu hình phiên bản có thể truy cập.

jacksparrow avatar
lá cờ ve
Cảm ơn @cilefen, tôi vừa định cấu hình solr, bạn nói đúng, không có lõi, tuy nhiên lô của tôi vẫn chạy một lần rồi dừng, không có lỗi, không có gì..hai chức năng của tôi có sai không?
lá cờ id
Đó là một câu hỏi mới. Hãy chấp nhận câu trả lời của tôi và hỏi khác.
jacksparrow avatar
lá cờ ve
Tôi đã làm nó, cảm ơn sự giúp đỡ của bạn!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.