ฉันจะย้ายเนื้อหาบล็อกจาก dev ไปยังไซต์การผลิตได้อย่างไร


24

ในที่สุดฉันก็เริ่มมองหา Drupal 8 อย่างจริงจังและฉันสนใจเป็นพิเศษในการจัดการการกำหนดค่า ฉันเจอสิ่งที่อาจมีปัญหาเล็กน้อยและเกี่ยวข้องกับเนื้อหาบล็อกที่กำหนดเอง

ฉันสามารถเห็นได้ว่าระบบการจัดการการกำหนดค่าสามารถส่งออกการกำหนดค่าบล็อก - ภูมิภาค, ธีม, น้ำหนัก, การมองเห็น ฯลฯ อย่างไรก็ตามเนื้อหาบล็อกที่เกิดขึ้นจริงไม่ได้อยู่ในการส่งออกการกำหนดค่าซึ่งมีเหตุผลและเข้าใจได้

ในการนำเข้าการกำหนดค่าบล็อกนั้นไปยังไซต์ที่ใช้งานจริงสิ่งที่ดูเหมือนจะเกิดขึ้นคือการกำหนดค่าบล็อกถูกสร้างขึ้นและมีการพักข้อความไว้การรายงานบล็อกนั้นขาดหายไปหรือขาดหายไป เห็นได้ชัดว่าเนื้อหาบล็อกไม่มีอยู่บนเซิร์ฟเวอร์ที่ใช้งานจริง

บล็อกที่กำหนดเองสามารถโยกย้ายจากเซิร์ฟเวอร์ dev / staging ไปยังเซิร์ฟเวอร์ที่ใช้งานจริงได้อย่างไร ฉันรู้ว่าบล็อกใน Drupal 8 เป็นเอนทิตีที่สามารถทำงานได้เช่นโหนดดังนั้นจะต้องย้ายข้อมูลในลักษณะเดียวกันและฉันเข้าใจว่ามี Migrate API ใน Drupal 8 แต่ดูเหมือนว่าจะสร้างขึ้นสำหรับการย้ายเนื้อหาจากเว็บไซต์ Drupal 6 และ 7 Drupal 8 ตรงข้ามกับ Drupal 8 ถึง Drupal 8 sites

ปัญหานี้เกี่ยวกับการบล็อกที่กำหนดเองโดยเฉพาะเป็นบล็อกที่สร้างขึ้นโดยโมดูลอื่น ๆ เช่น Views จะเห็นได้ชัดว่าจะโยกย้ายข้ามเป็นการกำหนดค่า

blocks  8 

มีโซลูชั่นเนื้อหาการแสดงละครหลายในการทำงานรวมทั้งโมดูลปรับใช้และ entitypilot.com คือ (ข้อจำกัดความรับผิดชอบว่าเป็นสินค้าของฉัน)
larowlan

คำตอบ:


7

คำตอบอื่นที่ฉันไม่ได้กล่าวถึงที่นี่คือการใช้โมดูลSimple Blockซึ่งค่อนข้างเหมือนกับการตั้งค่า 'Custom Block' ของคอร์ แต่แทนที่จะมีไฮบริดเนื้อหา + การตั้งค่าแบบแปลก ๆ คุณมีการตั้งค่าบล็อกและเนื้อหาทั้งหมด เก็บไว้ในการกำหนดค่าซึ่งสามารถส่งออกและนำเข้าได้อย่างหมดจด

ดูเพิ่มเติมสำหรับการอภิปรายใน Drupal 8 หลัก: บล็อกที่กำหนดเองไม่สามารถส่งออกและนำเข้าอย่างถูกต้อง


3

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

ฉันตั้งชื่อเนื้อหาบล็อกคงที่และเผยแพร่ที่:

https://www.drupal.org/project/fixed_block_content


1

อีกวิธีหนึ่งในการรักษาเนื้อหาที่เพิ่มไว้ซึ่งเป็นส่วนหนึ่งของการพัฒนาและผลักดันให้เผยแพร่สดคือการใช้โมดูลเนื้อหาเริ่มต้นเพื่อส่งออกเนื้อหา มันถูกสร้างขึ้นสำหรับเนื้อหาที่จะส่งออกไปยังโฟลเดอร์ 'เนื้อหา' ของโปรไฟล์การติดตั้งจากนั้นโมดูลหากเปิดใช้งานจะนำเนื้อหาโดยอัตโนมัติเมื่อมีการติดตั้งไซต์ แต่ก็เป็นไปได้ที่จะนำเข้าเนื้อหาทีละรายการ เช่นในเบ็ดการอัพเดทโดยมีรหัสด้านล่างในตัวอย่างของคุณติดตั้งหรือ example.profile:

<?php
/**
* Import a piece of content exported by default content module.
*/
function example_import_default_content($path_to_content_json) {
  list($entity_type_id, $filename) = explode('/', $path_to_content_json);
  $p = drupal_get_path('profile', 'guts');
  $encoded_content = file_get_contents($p . '/content/' . $path_to_content_json);
  $serializer = \Drupal::service('serializer');
  $content = $serializer->decode($encoded_content, 'hal_json');
  global $base_url;
  $url = $base_url . base_path();
  $content['_links']['type']['href'] = str_replace('http://drupal.org/', $url, $content['_links']['type']['href']);
  $contents = $serializer->encode($content, 'hal_json');
  $class = 'Drupal\\' . $entity_type_id . '\Entity\\' . str_replace(' ', '', ucwords(str_replace('_', ' ', $entity_type_id)));
  $entity = $serializer->deserialize($contents, $class, 'hal_json', array('request_method' => 'POST'));
  $entity->enforceIsNew(TRUE);
  $entity->save();
}

ส่งออกบล็อกที่กำหนดเองด้วย ID 8:

drush dcer block_content 8

(หากคุณไม่ได้กำหนดเส้นทางโปรไฟล์ของคุณในการตั้งค่า Drushคุณจะต้องระบุข้างต้น)

และใช้ผลลัพธ์การส่งออกในตัวอย่างของคุณติดตั้งไฟล์ดังนี้:

<?php
/**
* Add the footer block content.
*
* Implements hook_update_N().
*/
function example_update_8001() {
  example_import_default_content('block_content/136efd63-021e-42ea-8202-8b97305cc07f.json');
}

http://data.agaric.com/easily-add-content-update-hooks-use-default-content-module-exports-create-content-needs-be-sync-conf


0

ฉันไม่แน่ใจว่าฉันเห็นข้อได้เปรียบที่แข็งแกร่งของการกำหนดค่าการซิงค์บล็อกในสภาพแวดล้อมที่หลากหลายเนื่องจากบล็อกมีการเชื่อมโยงกับเนื้อหา

เหตุผลนี้คือมีบล็อกใหม่ที่ถูกสร้างขึ้นจากไฟล์ yml ที่ไม่มีชื่อ / เนื้อหา (เนื้อหา) และทำให้ข้อความ 'แตกหัก / หายไป'

คุณสามารถลองสร้าง UUID (ถ้าคุณต้องการสร้างบล็อกในทั้งสองแห่ง - ตรวจสอบให้แน่ใจว่าชื่อเครื่องตรงกัน ... ) ในตารางการพัฒนาของคุณ block_content ตรงกับสิ่งที่คุณมีในการผลิต (ความสัมพันธ์อื่น ๆ ดูเหมือนจะใช้เอนทิตี ID) จากนั้นเมื่อคุณทำการซิงค์การกำหนดค่าคุณสามารถเห็น 'ดูความแตกต่าง' ในไฟล์ yml และอาจเห็นสิ่งที่คุณต้องเปลี่ยนใน dev เพื่อให้ตรงกับ uuids การผลิต ฯลฯ ฉันได้รับการทำงาน แต่ยังคงคิด เป็นการง่ายที่สุดที่จะเพิกเฉยการกำหนดค่าบล็อกทั้งหมดของคุณในรหัสเว้นแต่ว่าคุณจะผ่านกระบวนการนี้หรือสร้างการซิงค์บล็อกฐานข้อมูลบางประเภทสำหรับตัวคุณเองโดยใช้ block_content, block_content__body และ block_content_field_data

มันไม่ได้สวยงามมากนัก แต่จะช่วยให้คุณสามารถกำหนดค่าการบล็อกในโค้ด มิฉะนั้นหากคุณยังคงปรับใช้บล็อกที่มีการตั้งค่าพวกเขาจะ 'เสียหรือขาดหายไป'

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


0

มีปัญหาเดียวกันและไม่ใช่วิธีแก้ปัญหาจริง ๆ มีเพียงส่วนเพิ่มเติมเท่านั้น: ในการพัฒนาร่วมกันเรากำลังใช้เซิร์ฟเวอร์ staging ซึ่งดึงมาจากที่เก็บและรีเซ็ตการกำหนดค่าทั้งหมด ซึ่งหมายความว่าการกำหนดค่าบล็อกกำลังรีเซ็ตโดยอัตโนมัติคุณไม่สามารถวางบล็อกที่คุณพิจารณาว่าเป็น "เนื้อหา" โดยตรงบนเซิร์ฟเวอร์นั้น

มันง่ายที่จะใช้ drush config-export sync ในขณะที่รู้ว่าคุณทำอะไรไปแล้วและมั่นใจได้ว่าการเปลี่ยนแปลงการกำหนดค่าใด ๆ แต่ Drupal ตัดสินใจสำหรับเราว่าการกำหนดค่าการบล็อก (ในขณะที่เนื้อหาการบล็อกนั้นถูกจัดการเป็นเนื้อหา) ดังนั้นดูเหมือนว่าจะถูกทำลายโดยการออกแบบ

สำหรับเวลาที่กำหนดฉันคิดว่าวิธีแก้ปัญหาที่เป็นประโยชน์มากที่สุดคือการเพิ่มไฟล์ yml ที่เกี่ยวข้องกับบล็อกลงใน. gitignore


1
Config Ignore น่าจะดีกว่า. gitignore: drupal.org/project/config_ignore
bdanin

0

ผมไม่แน่ใจว่ามากเกินไป แต่ถ้าคุณไม่พบวิธีการแก้ปัญหาใด ๆ ที่คุณอาจมีลักษณะนี้โมดูลhttps://www.drupal.org/project/deploy พูดตรงๆฉันจำไม่ได้ว่าสามารถปรับใช้บล็อกพุชจาก DEV ถึง PROD หรือไม่


0

ฉันคิดว่าวิธีที่ดีที่สุดในการจัดการสิ่งนี้คือ:

นี่คือสิ่งที่ฉันมักจะเห็นคนใช้และฉันใช้เป็นการส่วนตัว แต่จะซิงค์ฐานข้อมูลทั้งหมดเมื่อเปรียบเทียบกับเนื้อหาบล็อกเท่านั้น


สามารถใช้งานได้หากไม่มีปัญหากับการเขียนทับฐานข้อมูล ทีนี้ถ้าความปรารถนาเพียงอย่างเดียวคือการย้ายบล็อกที่กำหนดเองใหม่ไปยังฐานข้อมูลที่มีอยู่วิธีนี้จะยากที่จะใช้
karolus

คำตอบนี้มีสถานที่ในทางทฤษฎี แต่ในทางปฏิบัตินี่ไม่ใช่วิธีแก้ปัญหาที่ดีโดยเฉพาะอย่างยิ่งหากโครงการใช้การแยกการกำหนดค่าหรือมีการกำหนดค่าที่แตกต่างกันระหว่างสภาพแวดล้อม (ซึ่งมีโอกาสมาก)
komlenic

0

โปรดจับมือโมดูลการซิงค์โครงสร้าง

การซิงค์โครงสร้างจัดเตรียมคำสั่ง Drush และหน้าจอส่วนติดต่อผู้ดูแลระบบสำหรับการซิงโครไนซ์เนื้อหาที่อาจนำมาพิจารณาในการกำหนดค่า รวมถึงรายการเมนูบล็อกที่กำหนดเองและข้อกำหนดด้านอนุกรมวิธาน

ขั้นตอน:

  1. ไปที่โครงสร้างการซิงค์
  2. ไปที่แท็บบล็อก
  3. ส่งออก.
  4. การกำหนดค่าและเนื้อหาของคุณจะถูกส่งออกในโฟลเดอร์การกำหนดค่า
  5. นำการกำหนดค่าไปยังไซต์อื่น ๆ & นำเข้า
  6. ไปที่โครงสร้างการซิงค์ & คลิกที่นำเข้า
  7. เสร็จสิ้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.