Giao thức để thêm phụ thuộc mô-đun mới vào mô-đun chỉ có bản phát hành dev là gì?


7

Tôi đã tạo một mô-đun cách đây một thời gian và nó chỉ có bản phát hành 7.x-1.x-dev trên Drupal.org trong khoảng một tháng qua. Có một số tải xuống và cài đặt được báo cáo đã có cho mô-đun này, vì vậy tôi muốn đảm bảo rằng một số ít người dùng đang sử dụng mô-đun này vẫn được xem xét trong phiên bản phát triển tiếp theo tôi cần thực hiện. Bản phát hành mới sẽ có một phụ thuộc mô-đun mới từ một dự án khác (nghĩa là không bao gồm dưới dạng mô hình con của tôi). Mặc dù tôi thường tạo phiên bản 2.x nếu mô-đun có bản phát hành ổn định, nhưng nó chỉ ở dạng dev. Tôi chỉ cần tiếp tục và thêm phụ thuộc mới vào 1.x-dev hoặc tạo 2.x-dev?


tạo tài liệu để nâng cấp
monymirza

Tôi đã có kế hoạch sử dụng changelog và nâng cấp doc để ghi chú điều này. Đây không phải là vấn đề. Như người ta hy vọng người dùng sẽ đọc thông tin này trước khi cập nhật, nhiều người thì không. Mô-đun là trong dev, vì vậy mọi người nên mong đợi rằng nó sẽ phá vỡ trang web của họ, nhưng tôi muốn đảm bảo có giao thức cho việc này trước khi tiếp tục.
Nigel Waters

Câu trả lời:


3

Không có giao thức bị xử phạt cho trường hợp như vậy. Tất cả tôi nghĩ là để giảm thiểu tác động.

Hãy xem xét rằng ngay cả khi bạn tạo một chi nhánh mới, người dùng có thể cập nhật và không nhận ra có sự phụ thuộc mới và mô-đun của bạn có thể bị tắt âm thầm do phụ thuộc không được đáp ứng. Điều này đã xảy ra với việc cập nhật các chế độ xem từ 6.x-2.x lên 6.x-3.x trong đó một phụ thuộc vào ctools đã được thêm vào. Trong trường hợp đó, tác động là thấp vì ctools thường có mặt.

Về tài liệu, ngoài việc thay đổi hoặc nâng cấp tài liệu trong trang dự án, tôi đề nghị thêm nó vào ghi chú phát hành. Vì chúng có thể được đọc dễ dàng khi cập nhật với drush.

Cuối cùng, nếu phần phụ thuộc mà bạn giới thiệu là một mô-đun phổ biến, bạn có thể giảm bớt tác động bằng cách bật phụ thuộc mới trong hook_update_N hoặc gây ra lỗi nếu không có sẵn. Đây là một số mã chưa được kiểm tra:

<?php
function MODULENAME_update_7001() {
  $enabled = module_enable(array('foo', 'bar'));
  if (!$enabled) {
    throw new DrupalUpdateException('foo required.');
  }
}

0

Ngoài những gì @jonhattan đã đề cập, tôi sẽ đề xuất thêm một phương pháp để làm điều đó. Thêm những phụ thuộc trong tệp mymodule.info. Giả sử bạn muốn thêm phụ thuộc mới vào liên kết, email và trường địa chỉ.

dependencies[] = link
dependencies[] = email
dependencies[] = addressfield

Bây giờ trong hook numquirments cố gắng kích hoạt các mô-đun tự động nếu có. Xin lưu ý rằng vì chúng tôi đã thêm các phụ thuộc trong tệp thông tin, chúng sẽ được bật nếu lần đầu tiên cài đặt. Nhưng nếu không họ sẽ xuất hiện "bị khóa". Trong trường hợp này, chúng tôi sẽ phải kích hoạt chúng tự động. Bây giờ như @jonhattan đã trả lời, bạn có thể thử làm điều đó trong hook_update_N và ném ngoại lệ khi thất bại.

Nhưng vấn đề với phương pháp trên là trải nghiệm người dùng. Bạn không thể xuất "liên kết" trong thông báo ngoại lệ. Một cách khác là có thể dễ dàng tránh được bằng cách cho người dùng biết ngay trước khi cập nhật. Đối với trường hợp như vậy, chúng tôi có hook_Vquirements.

Tôi sẽ cung cấp một ví dụ về cách sử dụng hook_Vquirements cho trường hợp ví dụ tôi đã đề cập.

/**
 * Implements hook_requirements.
 */
function mymodule_requirements($phase) {
  $requirements = array();
  if ($phase == 'update') {
    $enabled = module_enable(array('link', 'email', 'addressfield'));
    if( !$enabled ) {
      $t = get_t();
      $requirements['mymodule_migrate'] = array(
        'title' => $t('Mymodule Migrate Issues'),
        'value' => $t('One or more of the required modules cannot be enabled.
          If you download the modules from Drupal.org those would be enabled automatically when update script is run.
          So Please make sure following modules are present: !link, !email & !addressfield',
          array(
            '!link' => l('link', 'https://drupal.org/project/link'),
            '!email' => l('email', 'https://drupal.org/project/email'),
            '!addressfield' => l('addressfield', 'https://drupal.org/project/addressfield'),
          )
        ),
        'severity' => REQUIREMENT_ERROR,
      );
    }
  }
  return $requirements;
}

Bây giờ cũng có thể cố gắng kích hoạt từng mô-đun riêng lẻ và tạo thông điệp đúng cách để chỉ những mô-đun vắng mặt mới được hiển thị trong tin nhắn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.