ฉันรู้ว่ามีเธรดอื่นมากมายเกี่ยวกับเรื่องนี้ แต่ฉันเชื่อว่าของฉันเป็นเธรดที่แปลก และฉันใช้เวลาวันสุดท้ายในการดีบักสาเหตุของมันโดยไม่มีโชค ดังนั้นหวังว่าคนที่มีความรู้เพิ่มเติมเกี่ยวกับสคีมา/ที่เก็บข้อมูลฟิลด์จะช่วยฉันได้
ขั้นแรก มีพื้นฐานเล็กน้อยเกี่ยวกับสิ่งที่ฉันกำลังทำอยู่ ฉันมีชุดการกำหนดค่าซึ่งรวมเป็นแพ็กเกจโดยใช้โมดูลคุณลักษณะและปรับใช้เป็นแพ็กเกจกับไซต์อื่นๆ ของเราจำนวนหนึ่ง ส่วนหนึ่งของชุดฟีเจอร์นี้คือประเภทฟีดจำนวนหนึ่งสำหรับนำเข้าเนื้อหาไปยังโหนด เมื่อฉันปรับใช้คุณลักษณะนี้บนไซต์ 1 แห่ง ฉันได้รับข้อผิดพลาด "เอนทิตีที่ไม่ตรงกันและ/หรือคำจำกัดความของฟิลด์" สำหรับฟิลด์ feeds_item ในไซต์อื่นที่ฉันปรับใช้ ฉันไม่พบข้อผิดพลาดใดๆ ความจริงที่ว่ามันผิดพลาดในอันหนึ่ง แต่ไม่ใช่อีกอันนั้นแปลก
ฉันติดตามปัญหาไปที่ SqlContentEntityStorageSchema::requiresFieldStorageSchemaChanges
. โดยเฉพาะอย่างยิ่งสิ่งที่เกิดขึ้นคือมูลค่าของ $installed_schema
เป็นอาร์เรย์ว่างบนไซต์ที่มีข้อผิดพลาด แต่มีข้อมูลบนไซต์โดยไม่มีข้อผิดพลาด
/**
* {@inheritdoc}
*/
ฟังก์ชันสาธารณะต้องการFieldStorageSchemaChanges (FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) {
$table_mapping = $this->getTableMapping($this->entityType);
ถ้า (
$storage_definition->hasCustomStorage() != $original->hasCustomStorage() ||
$storage_definition->getSchema() != $original->getSchema() ||
$storage_definition->isRevisionable() != $original->isRevisionable() ||
$table_mapping->allowsSharedTableStorage($storage_definition) != $table_mapping->allowsSharedTableStorage($original) ||
$table_mapping->requiresDedicatedTableStorage($storage_definition) != $table_mapping->requiresDedicatedTableStorage($เดิม)
) {
กลับ TRUE;
}
ถ้า ($storage_definition->hasCustomStorage()) {
// ฟิลด์มีที่เก็บข้อมูลแบบกำหนดเอง ดังนั้นเราจึงไม่ทราบว่ามีการเปลี่ยนสคีมาหรือไม่
// จำเป็นหรือไม่ แต่เนื่องจากการตรวจสอบเบื้องต้นก่อนหน้านี้
// ฟังก์ชัน ไม่มีอะไรเปลี่ยนแปลงเกี่ยวกับคำจำกัดความที่เราจัดการ เรา
// ส่งคืน FALSE
กลับ FALSE;
}
$current_schema = $this->getSchemaFromStorageDefinition($storage_definition);
$this->processFieldStorageSchema($current_schema);
$installed_schema = $this->loadFieldSchemaData($เดิม);
$this->processFieldStorageSchema($installed_schema);
ส่งคืน $current_schema != $installed_schema;
}
ถ้าตรวจภายใน คีย์_ค่า
ตารางที่มีแบบสอบถามเหล่านี้ เลือก * จาก key_value โดยที่คอลเล็กชัน เช่น 'entity.storage_schema.sql' และตั้งชื่อ เช่น 'node.field_schema_data.feeds_item'
มันว่างเปล่าเช่นกันใน 1 แต่ไม่ใช่อีกอัน:
ดังนั้น ยังไงก็ตาม schema ไม่ได้รับการติดตั้งอย่างถูกต้องในไซต์เดียว ฉันสามารถแก้ไขได้โดยการติดตั้ง devel-entity-อัพเดท
โมดูลหรือเขียน hook อัปเดตที่จะบันทึกคำจำกัดความของหน่วยเก็บข้อมูลฟิลด์ที่มีอยู่อีกครั้ง แต่ฉันหวังว่าบางคนจะมีข้อมูลเชิงลึกเกี่ยวกับ ทำไม สิ่งนี้กำลังเกิดขึ้น ขอขอบคุณ!
หมายเหตุ ไซต์ที่มีข้อผิดพลาดกำลังทำงานบน Drupal 9.2.10
ในขณะที่ไซต์ทำงานโดยไม่มีข้อผิดพลาด 9.2.11
แต่ฉันไม่แน่ใจว่านั่นสร้างความแตกต่าง
นอกจากนี้ ฉันควรชี้ให้เห็นว่าฟิลด์นี้ได้รับการติดตั้งอย่างดีและใช้งานได้จริง เป็นเพียงข้อผิดพลาดที่ไม่ตรงกันเท่านั้นที่เป็นปัญหา