Làm cách nào để chạy lại các bản cập nhật (thay đổi phiên bản lược đồ mô-đun)?


22

Tôi đang làm việc trên một mô-đun và tôi đã thay đổi một vài loại trường trong lược đồ. Tôi đã không sao lưu trước khi thử nghiệm nó và làm hỏng DB (nó chỉ là một trang dev). Dù sao, tôi đã cài đặt lại mọi thứ và phiên bản lược đồ được đặt thành bản cập nhật cao nhất. Tuy nhiên, tôi thực sự cần phải chạy bản cập nhật; Chế độ xem Tôi sẽ không cài đặt nếu tôi có lược đồ được cập nhật trong mã mô-đun, vì vậy tôi cho rằng đây sẽ là một cách tốt để kiểm tra bản cập nhật đó.

Làm cách nào để đặt lại phiên bản lược đồ của mô-đun của tôi thành một phiên bản cụ thể? Trong Drupal 7, tôi đã làm điều này:

drush sqlq "UPDATE system SET schema_version=8102 WHERE name='flllpdf' AND type='module'"

Câu trả lời:


47

Trong khi truy cập trạng thái trực tiếp hoạt động, bạn cũng có thể chỉ cần sử dụng API: drupal_set_installed_schema_version () . Mà thực sự tồn tại không thay đổi ít nhất kể từ 4.7, như hiển thị trên trang tài liệu được liên kết. Có lẽ là một trong số ít các hàm API tồn tại quá lâu;)

Để thiết lập nó từ drush:

drush ev "drupal_set_installed_schema_version('fillpdf', 8012)"

Lưu ý: Trong Drupal 7, bạn cần thêm include 'includes/install.inc';.


5
Cũng tốt nếu bạn chỉ cần kiểm tra nhanh: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/feft/th
ben.hamelin

hoặc modush pm-
information modulename

10

Drupal 8 hiện sử dụng keyvaluedịch vụ để lưu trữ thông tin về phiên bản lược đồ. Đây là cùng một API mà chính API nhà nước sử dụng.

Thông tin giá trị được tuần tự hóa khi được lưu trữ trong cơ sở dữ liệu, vì vậy sử dụng truy vấn SQL trực tiếp là tối ưu phụ. Thay vào đó, hãy sử dụng drush php-eval(hoặc tập lệnh bootstraps Drupal, nếu bạn không có Drush) để thực hiện các thao tác sau:

<?php
  \Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102);
?>

Thay đổi fillpdf8102tên mô-đun của bạn và phiên bản lược đồ mong muốn, tương ứng.

Hình thức Drush của lệnh này là:

drush ev "\Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102)";


0

Để cài đặt và NHẬN cập nhật mô-đun qua mã (không có Drush). Dưới đây là mã

GET  = drupal_get_installed_schema_version('moduleName');

SET = drupal_set_installed_schema_version("moduleName", "8000");

0

Cũng có thể đi cập nhật nó trực tiếp trong cơ sở dữ liệu. Nếu bạn đang sử dụng một cái gì đó như Sequel Pro (mac) hoặc bất kỳ cơ sở dữ liệu giao diện người dùng nào thì windows / linux có thực sự dễ dàng. Có thể cho rằng đó không phải là ý tưởng tốt nhất và sẽ không khuyên bạn nên làm điều này với cơ sở dữ liệu mức sản xuất, nhưng nó sẽ hoàn thành công việc!

Bảng = key_value

bộ sưu tập = system.schema
name = fillpdf (your_module)
value = cập nhật lên i: 8102;

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.