ไม่รวมการกำหนดค่าจากการนำเข้า / ส่งออก


16

ฉันคิดว่านี่เป็นกรณีการใช้งานที่ง่ายของระบบจัดการการกำหนดค่าใหม่ แต่ฉันไม่มีโชคในการหาวิธีแก้ปัญหานี้:

ปัญหา

ฉันต้องการเก็บการกำหนดค่าใน git และใช้ drush เพื่อส่งออกการกำหนดค่าในระหว่างการพัฒนาและจากนั้นในการปรับใช้การนำเข้าการกำหนดค่า ค่อนข้างคล้ายกับการทำคุณสมบัติย้อนกลับใน Drupal 7 ปัญหาของฉันคือฉันไม่ต้องการเก็บรหัสการเข้าถึงในคอมไพล์สำหรับการผสานรวมที่หลากหลาย ซึ่งส่งผลให้การกำหนดค่าเหล่านี้ถูกลบ
$ drush cim -y

ที่ฉันดู

ฉันหวังว่าจะมีรายการ / การกำหนดค่าอย่างง่ายสำหรับการกำหนดค่าที่ควรยกเว้นในการนำเข้า / ส่งออก ดูเหมือนว่าจะมีบางจุด แต่มันจะต้องถูกลบออกอีกครั้งเนื่องจากมีวางจำหน่ายในปัจจุบัน Drupal 8

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

ฉันทำบางสิ่งขาดหายไปหรือไม่สามารถแยกการกำหนดค่าออกจากการนำเข้า / ส่งออกได้

คำตอบ:


7

เป็นไปไม่ได้ที่จะมีการยกเว้นโดยเฉพาะ แต่มีบางอย่าง

เช่นเดียวกับ $ conf ใน Drupal 7 มี $ config ใน settings.php ที่คุณสามารถใช้เพื่อแทนที่สิ่งใด ๆ ในการกำหนดค่าภายในเครื่อง $config['name.of.config']['nested']['key']รูปแบบคือ

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

ฉันเข้าใจว่าสิ่งนี้มีข้อ จำกัด แต่ในตอนนี้มันเป็นไปไม่ได้ที่จะทำให้บางสิ่งออกจากการกำหนดค่าที่ส่งออก เท่าที่ฉันรู้.


ดังนั้นโดยทั่วไปคุณต้องตั้งค่า / อัปเดตการกำหนดค่าในไฟล์ settings.php แทนการใช้ส่วนต่อประสาน
googletorp

ใช่มันไม่มีอะไรใหม่ ไม่มีอะไรเปลี่ยนแปลงในเวิร์กโฟลว์ในบริบทนี้ใน d8

11

คุณสามารถใช้โมดูล "กำหนดค่าละเว้น": https://www.drupal.org/project/config_ignore

เคยมีประสบการณ์ว่าการกำหนดค่าเว็บไซต์ของคุณถูกแทนที่โดยการกำหนดค่าบนระบบไฟล์เมื่อทำการ drim cim หรือไม่?

ไม่อีกแล้ว!

โมดูลนี้เป็นเครื่องมือที่ช่วยให้คุณสามารถกำหนดค่าที่คุณต้องการ


2
config_ignore น่าจะเป็นวิธีแก้ปัญหาที่ง่ายและเสถียรที่สุดที่มีอยู่ในปัจจุบันและวิธีนี้อาจตอบสนองความต้องการของ OP ได้ดีที่สุดคือ "รายการ / การกำหนดค่าอย่างง่ายสำหรับการกำหนดค่าที่ควรยกเว้นในการนำเข้า / ส่งออก"
bdanin

7

คุณสามารถใช้การรวมกันของconfig_ignoreและconfig_splitสำหรับสิ่งนี้

การข้ามการกำหนดค่าช่วยให้คุณสามารถละเว้นชุดย่อยของเอนทิตีการกำหนดค่าในระหว่างการนำเข้า (นอกจากนี้ยังป้องกันการลบตั้งแต่รุ่น 2.x) น่าเสียดายที่มันไม่ได้ป้องกันการยกเว้นการตั้งค่าในระหว่างการส่งออก

ในการแยกเอนทิตีการกำหนดค่าระหว่างการส่งออกคุณสามารถใช้ config_split สร้างเอนทิตี config_split ใหม่และปล่อยให้โฟลเดอร์ว่างเปล่า สิ่งนี้ป้องกันไม่ให้การกำหนดค่าถูกส่งออกไปยังระบบไฟล์ แต่จะส่งออกในฐานข้อมูลแทน

ฉันเขียนยกเว้นการตั้งค่าจากการจัดการการกำหนดค่าใน Drupal 8เกี่ยวกับหัวข้อนี้


5

เพื่อที่จะกำหนดค่าแยกคุณสามารถใช้https://www.drupal.org/project/config_split

ป้อน config_split ที่ให้คำสั่งคอนโซล Drupal สำหรับการนำเข้าและส่งออกการกำหนดค่าที่กรอง การรวม Drush มีแนวโน้มที่จะตามมาในไม่ช้า (หลังจากตัวกรองทั้งหมดได้รับแรงบันดาลใจจาก --skip-modules filter ของ drush)

คุณสามารถแยกการส่งออกเป็น dirs ต่าง ๆ ซึ่งคุณสามารถคอมไพล์ละเว้นได้

มีการนำเสนอที่ดีมากใน drupal con dublin 2016โดยผู้รับผิดชอบ CMI ซึ่งฉันขอให้คุณลองดูไม่ว่าอะไรจะเกิดขึ้น


2

ฉันเพิ่งทดสอบ @berdir ใน # 1 คำตอบและมันทำงานได้อย่างสมบูรณ์ มีเพียงฉันเท่านั้นที่จะเพิ่มบันทึกย่อ: คุณต้องใส่การตั้งค่าทั้งหมดใน var นี้เสร็จสมบูรณ์ ไม่ว่าจะเป็น $ config var ทำงานไม่ถูกต้อง

บางสิ่งเช่นนี้

 $config['language.negotiation'] = array(
  'session' => array(
    'parameter' => 'language',
  ),
  'url' => array(
    'source' => 'domain',
    'prefixes' => array(
      'es' => '',
      'pt-br' => '',
    ),
    'domains' => array(
      'es' => 'YourLocalDomain',
      'pt-br' => 'Anotherlocaldomain',
    ),
  ),
  'selected_langcode' => 'site_default',
  'langcode' => 'es',
);

เอกสารประกอบ: https://www.drupal.org/node/1928898

หมายเหตุจากเอกสารด้านบน: "โปรดทราบว่าค่าที่แทนที่ด้วย $ config ภายใน settings.php จะไม่สามารถดูได้จากส่วนติดต่อผู้ดูแลระบบของ Drupal"


3
คุณไม่ควรทำเช่นนี้ มันควรรวมในค่าใด ๆ ที่คุณกำหนด แต่อาจจะไม่ได้ผลตามที่คาดหวังกับโครงสร้างบางอย่าง
Berdir

โอ้ฉันไม่สามารถเรียกใช้ได้อย่างถูกต้อง ฉันจะพยายามแก้ไขข้อบกพร่องอีกครั้งและหากไม่ทำงานอย่างถูกต้องฉันอาจเปิดข้อบกพร่องใน d.org ขอบคุณ!
estoyausente

1
ฉันยืนยันได้ว่าคุณสามารถทำสิ่งที่ชอบได้$config['module.settings']['some']['value'] = 'foo';
googletorp

2

ฉันค่อนข้างสงสัยว่าทำไมไม่มีใครพูดถึงเครื่องมือ Drush CMI ในตอนนี้ คำมายากลและdrush cexy config-ignore.ymlคุณจะมีรายการที่คุณสามารถปรับได้ เราต้องการหนึ่งครั้งเพื่อแยกอินสแตนซ์ของบล็อกออกในขณะที่ในเวลาเดียวกันนั้นฐานบล็อกก็ถูกประมวลผล

เราต้องการส่งออกการกำหนดค่าทั้งหมด แต่เราต้องการยกเว้นรูปแบบบางอย่าง

นี่คือที่มา--ignore-listของตัวเลือกdrush cexy

ในโครงการของเราเรามีโฟลเดอร์. / DRush ดังนั้นเราจึงทำการติดไฟล์ในชื่อconfig-ign.yml ที่มีเนื้อหาดังนี้

ignore:
  - field.field.contact_message.*
  - field.storage.contact_message.*
  - contact.form.*
  - core.entity_form_display.contact_message*
  - core.entity_form_display.contact_form*
  - core.entity_view_display.contact_message*
  - core.entity_view_display.contact_form*
  - system.site
  - workbench_email.workbench_email_template.*

ดังนั้นตอนนี้เราทำงานdrush cexyอย่างนั้น

drush cexy --destination=/path/to/config-export --ignore-list=/path/to/drush/config-ignore.yml

ดังนั้นสิ่งนี้จะเป็นการส่งออกการกำหนดค่าที่ใช้งานอยู่จากนั้นใช้รายการเพิกเฉยเพื่อลบการกำหนดค่าที่ไม่ต้องการ

ดังนั้นเมื่อคุณรันgit statusคุณควรเห็นการเปลี่ยนแปลงที่คุณต้องการกระทำ

ที่มา: https://www.previousnext.com.au/blog/introducing-drush-cmi-tools

การติดตั้ง

cd ~/.drush
wget https://raw.githubusercontent.com/previousnext/drush_cmi_tools/8.x-1.x/drush_cmi_tools.drush.inc
drush cc drush

ที่มา: https://github.com/previousnext/drush_cmi_tools


1

ใช้การแบ่งการกำหนดค่า (แนะนำ)

โมดูลการตั้งค่าแยกถูกสร้างขึ้นมาโดยเฉพาะสำหรับความต้องการนี้

แยกการกำหนดค่าถูกรวมเข้ากับ drush

ใช้ Drush เท่านั้น

Drush ก็ควรที่จะสามารถทำได้โดยใช้--skip-modulesธง

คุณสามารถเพิ่มบรรทัดต่อไปนี้ใน drupal / drushrc.php ใน webroot ของโครงการของคุณเพื่อทำมันโดยอัตโนมัติ

$command_specific['config-export']['skip-modules'] = array('devel');
$command_specific['config-import']['skip-modules'] = array('devel');

ดูhttp://www.drush.org/en/master/config-exporting/#ignoring-development-modules

น่าเศร้าที่มีปัญหากับการทำงานนี้: https://github.com/drush-ops/drush/issues/1820 ดังนั้นในขณะที่คุณต้องเพิ่มไฟล์กำหนดค่าเหล่านั้นใน. gitignore ของคุณเพื่อให้ไฟล์กำหนดค่าที่ส่งออกไม่ได้รับการยืนยัน เป็นของพวกเขาอย่างต่อเนื่องอาจจะละทิ้งการทำงาน (บั๊กกี้) นี้จาก drush เพื่อสนับสนุนการแยก config


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

@ user157272 แม้ว่าคุณจะนำเข้าโดยใช้ drush ด้วย ['config-import'] ['skip-modules']?
กาการีน

drushrc.php สามารถวางไว้นอก webroot ตัวอย่างหนึ่งระดับที่สูงขึ้นซึ่งจะเป็นประโยชน์เมื่อคุณทำงานกับ Drupal ในการติดตั้งแต่งเพลง: github.com/drupal-composer/drupal-project
leymannx

สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันเพิ่มโมดูล แต่พวกเขายังคงถูกเพิ่มลงในโมดูลเปิด / ปิดการใช้งาน
Jeremy John

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