ฉันจะเรียกใช้การอัปเดตใหม่ได้อย่างไร (เปลี่ยนรุ่นของโมดูลสคีมา)


22

ฉันกำลังทำงานกับโมดูลและฉันเปลี่ยนประเภทฟิลด์สองสามในสคีมา ฉันไม่ได้สำรองข้อมูลก่อนที่จะทดสอบและทำให้ฐานข้อมูลยุ่งเหยิง (เป็นเพียงไซต์ dev) ต่อไปฉันจะติดตั้งใหม่ทุกอย่างและเวอร์ชัน schema นั้นถูกตั้งค่าไว้ที่การอัพเดทสูงสุด อย่างไรก็ตามฉันต้องทำการอัพเดท ดูฉันจะไม่ติดตั้งหากฉันมี schema ที่ปรับปรุงแล้วในรหัสโมดูลดังนั้นฉันจึงคิดว่านี่จะเป็นวิธีที่ดีในการทดสอบการอัปเดตนั้น

ฉันจะรีเซ็ตรุ่นสคีมาของโมดูลของฉันเป็นเวอร์ชันที่ต้องการได้อย่างไร ใน Drupal 7 ฉันจะทำสิ่งนี้:

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

คำตอบ:


47

ขณะที่การเข้าถึงรัฐโดยตรงทำงานคุณยังสามารถเพียงแค่ใช้ API: drupal_set_installed_schema_version () ซึ่งมีอยู่จริงไม่เปลี่ยนแปลงอย่างน้อยตั้งแต่ 4.7 ตามที่ปรากฏในหน้าเอกสารที่เชื่อมโยง อาจเป็นหนึ่งในไม่กี่ฟังก์ชั่น API ที่มีอยู่มานาน;)

วิธีตั้งจาก drush:

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

หมายเหตุ: ใน Drupal 7 include 'includes/install.inc';คุณต้องเพิ่มพิเศษ


5
ยังดีถ้าคุณเพียงแค่ต้องตรวจสอบอย่างรวดเร็ว: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin

หรือ drul pm-info modulename
Beanluc

10

Drupal 8 ตอนนี้ใช้keyvalueบริการเพื่อเก็บข้อมูลเกี่ยวกับเวอร์ชันของ schema นี่คือ API เดียวกับที่ API ของรัฐใช้

ข้อมูลค่าจะถูกทำให้เป็นอนุกรมเมื่อเก็บไว้ในฐานข้อมูลดังนั้นการใช้แบบสอบถาม SQL โดยตรงจึงไม่เหมาะสมที่สุด ให้ใช้drush php-eval(หรือสคริปต์ที่บูต Drupal หากคุณไม่มี Drush) เพื่อดำเนินการต่อไปนี้:

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

เปลี่ยนfillpdfและเปลี่ยน8102เป็นชื่อโมดูลและเวอร์ชันสกีมาที่ต้องการตามลำดับ

รูปแบบ Drush ของคำสั่งนี้คือ:

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


0

ในการตั้งค่าและรับโมดูลการปรับปรุงผ่านรหัส (ไม่มี Drush) ด้านล่างเป็นรหัส

GET  = drupal_get_installed_schema_version('moduleName');

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

0

ยังสามารถไปอัปเดตได้โดยตรงในฐานข้อมูล หากคุณกำลังใช้งานบางอย่างเช่น Sequel Pro (mac) หรือเครื่องมือ UI / ฐานข้อมูลใด ๆ ของ windows / linux ก็เป็นเรื่องง่าย เนื้อหาไม่ใช่ความคิดที่ดีที่สุดและจะไม่แนะนำให้ทำเช่นนี้กับฐานข้อมูลระดับการผลิต แต่จะทำให้งานสำเร็จ!

ตาราง = key_value

collection = system.schema
name = fillpdf (your_module)
value = update เป็น i: 8102;

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.