Điểm:0

Cách cài đặt mô-đun mới, thêm mã vào mô-đun hiện có yêu cầu mô-đun mới và nhập cấu hình cho mô-đun mới trong cùng một bản dựng

lá cờ hk

Tôi dường như đang gặp sự cố phụ thuộc vòng tròn trong trường hợp bản dựng mới của tôi có mô-đun mới (B), mã mới trong mô-đun hiện có (A) phụ thuộc vào mô-đun mới (B) và cấu hình mới được nhập cho mô-đun mới (B).

Trước đây, tôi đã xử lý việc này bằng cách tạo và triển khai hai bản dựng độc lập, một trong đó tôi triển khai các mô-đun mới và kích hoạt chúng, và trong bản dựng thứ hai, mã triển khai yêu cầu các mô-đun mới và cấu hình cho các mô-đun mới.

Có cách nào tốt hơn để xử lý việc này không?

Thay đổi trong Mô-đun A là một trong các dịch vụ trong Mô-đun A yêu cầu dịch vụ từ Mô-đun B.

Tôi đã thêm phần phụ thuộc vào mô-đun B mới trong tệp module_A.info.yml nhưng điều đó không hữu ích vì mô-đun đã được cài đặt.

drush vi module_b không hoạt động và nó báo lỗi.

Dịch vụ "module_A_service" phụ thuộc vào dịch vụ không tồn tại "module_B_service".

Nhập cấu hình trong bản dựng đã cập nhật core.extensions để bật module_B khi được nhập nhưng nhập cấu hình với drush cim không thành công với lỗi tương tự như trên.

lá cờ id
Tôi đã làm những gì bạn đã làm. Bạn cũng có thể nghĩ đến việc phát hiện mô-đun hoặc dịch vụ khác và quay trở lại một số hành vi cơ bản.
lá cờ cn
Có vẻ như bạn muốn thêm `hook_update_N` trong module_A để cài đặt module_B
lá cờ hk
Cảm ơn vì câu trả lời @cilefen Các phần phụ thuộc dịch vụ không khó theo cách các phần phụ thuộc được thêm vào tệp yml?
lá cờ hk
Cảm ơn phản hồi @Clive - Tôi đã không thử điều đó một cách rõ ràng, nhưng tôi đã thử drush php eval của \Drupal::service('module_installer')->install(['module_b']);. Điều đó đã đưa ra cùng một lỗi. Nó sẽ hoạt động khác đi trong hook_update. Tôi cũng có thể thử điều đó.
Jaypan avatar
lá cờ de
Lỗi cho biết rằng dịch vụ A của bạn có phần phụ thuộc không tồn tại, đây không phải là phần phụ thuộc vòng tròn. Lỗi là gì nếu bạn triển khai mọi thứ trong một lần xác nhận, thay vì chia thành hai lần?
lá cờ hk
Cảm ơn bạn đã trả lời @Jaypan. drush cr không thành công với lỗi trên. drush cim cũng bị lỗi với lỗi tương tự. drush updb chạy nhưng hiển thị lỗi tương tự. Tôi không triển khai điều này trong nhiều bản dựng. Tôi đang triển khai trong một bản dựng duy nhất. Điều tôi đang nói là tôi thường giải quyết vấn đề này bằng hai bản dựng và đang cố gắng tìm ra cách tốt nhất để giải quyết vấn đề này trong một bản dựng duy nhất.
Jaypan avatar
lá cờ de
Nếu đây là từ một lần triển khai, trước tiên hãy thử sử dụng Drush để bật Mô-đun B, sau đó chạy `drush updb`.
lá cờ hk
drush en module_b không thành công với lỗi tương tự như trên. Tuy nhiên, tôi đã tiếp tục và thêm một bản cập nhật hook với \Drupal::service('module_installer')->install(['module_b']); như những gì @Clive đã đề xuất. Nó đã hoàn thành mà không có lỗi và đã cài đặt mô-đun. Vì vậy, giải pháp là thêm một bản cập nhật hook để kích hoạt rõ ràng mô-đun phụ thuộc mặc dù bản dựng có cấu hình để kích hoạt mô-đun sau này.
lá cờ cn
Tôi nghĩ rằng `updb` chạy dưới một chế độ bootstrap khác, vì vậy nó đáng để thử nếu bạn có thể kiểm tra trước (chỉ cần kéo các tệp DB/công cộng xuống và chạy cục bộ sẽ cho phép bạn làm điều đó). Tôi khá chắc chắn rằng tôi đã thực hiện chính xác điều này trước đây để giải quyết vấn đề tương tự. Có thể không thực hiện `drush cr` trước `updb`, vì vậy hệ thống không có cơ hội xây dựng lại bộ đệm plugin cho đến khi mô-đun được bật
lá cờ hk
Cảm ơn @Clive. Điều đó đã làm được điều đó.
Điểm:1
lá cờ hk

Đây là giải pháp hiệu quả

a) Triển khai hook_update_N trong mô-đun A đã được cài đặt.Trong hook_update_N thêm mã để cài đặt module_b. Bao gồm điều này trong cùng một bản dựng.

chức năng module_a_update_NNNN(&$sandbox) {
  $module_installer = \Drupal::service('module_installer');
  $module_handler = \Drupal::service('module_handler');
  if (!$module_handler->moduleExists('module_b')) {
    $module_installer->install(['module_b']);
  }
}

b) Triển khai bản dựng

c) Không xóa bộ nhớ cache. Nếu bạn chạy xóa bộ đệm trước khi updb, nó sẽ đưa ra lỗi tương tự như đã đề cập trong câu hỏi.

đ) Chạy drush updb

e) Chạy drush cim

f) Chạy drush cr

Đă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.