ต่อไปนี้จะเป็น OK สำหรับรุ่นแพทช์8.4.x> 8.4.yแต่ไม่ตกลงสำหรับรุ่นเล็ก ๆ น้อย ๆ8.4.x> 8.5.x ข้ามไปที่UPDATE 3ด้านล่างสำหรับสิ่งที่ฉันเชื่อว่าเป็น "คำตอบ" สำหรับการอัปเดตรุ่นย่อย
1- สำรองไฟล์ใด ๆ ที่มาพร้อมกับ Drupal ที่คุณแก้ไขเช่น. htaccess, robots.txt และอื่น ๆ (ทั้ง 2 ไฟล์นั้นมีการเปลี่ยนแปลงบ่อยที่สุด)
2- [มีคนบอกฉันว่าลบไฟล์ล็อคผิดดูอัปเดตด้านล่าง] ลบผู้แต่งล็อคไฟล์ (ในโฟลเดอร์ระดับบนสุดของเว็บไซต์ของคุณ) สิ่งนี้จะถูกสร้างขึ้นใหม่ในขั้นตอนที่ 5
3- ตรวจสอบผู้แต่งของคุณ (ในโฟลเดอร์ระดับบนสุดของเว็บไซต์ของคุณ) และตรวจสอบให้แน่ใจว่า "drupal: core" อยู่ในส่วนต้องการและไม่อยู่ในส่วนแทนที่เช่น
"require": {
"drupal/core": "^8.4"
},
ไม่
"replace": {
"drupal/core": "^8.4"
},
หาก "drupal / core" อยู่ในส่วนแทนที่ให้ย้ายไปยังส่วนต้องการและลบส่วนแทนที่ หากมีรายการอื่น ๆ ในส่วนแทนที่เพียงแค่ลบ "drupal / core" ไม่ใช่ส่วนแทนที่ทั้งหมด - แต่ฉันคิดว่า "drupal / core" เป็นเรื่องปกติเท่านั้น
วางเวอร์ชันที่คุณต้องการอัปเดตเป็น "drupal / core" ตัวอย่าง:
"drupal / core": "^ 8.5" - จะอัปเดตเป็นเวอร์ชันล่าสุด 8.5 "drupal / core": "8.4.6" - จะอัปเดตเป็นเวอร์ชัน 8.4.6
5- รันสิ่งนี้ (ในโฟลเดอร์ระดับบนสุดของเว็บไซต์ของคุณ):
composer update drupal/core --with-dependencies
6- หากไม่มีข้อผิดพลาดให้ทำตามปกติทำการอัพเดทและล้างแคช:
drush updatedb
drush cr
หรือหากไม่ได้ใช้ drush ให้ไปที่ /update.php เพื่อเรียกใช้การอัปเดตจากนั้นไปที่ admin / config / development / performance แล้วกดปุ่ม "ล้างแคชทั้งหมด"
7- หากคุณสำรองไฟล์ไว้ในขั้นตอนแรก (.htaccess, robots.txt) ให้นำกลับคืนมา แต่ตรวจสอบเพื่อดูว่า Drupal ทำการอัพเดทไฟล์เหล่านั้นและเพิ่มการเปลี่ยนแปลงเหล่านั้นให้กับคุณหรือไม่
DONE
หากมีข้อผิดพลาดกับการอัปเดตผู้แต่งในขั้นตอนที่ 5 มักจะเกิดจากปัญหาของรุ่นของเนื้อหาในโฟลเดอร์ผู้จัดจำหน่าย
นี่คือโพสต์ที่ยอดเยี่ยมในการจัดการกับปัญหาดังกล่าว: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-updateและอ่านเจฟฟ์ 2 โพสต์บน Drupal และนักแต่งเพลงเพื่อรับ ความรู้เพิ่มเติมเกี่ยวกับที่
ฉันบอกคน 2 คนบน Twitter ว่าไม่ควรลบผู้แต่งล็อคนี้ (ขั้นตอนที่ 2 ด้านบน) composer update drupal/core --with-dependencies
คำสั่งสร้างแฟ้มล็อคแล้วล่ะ
ในการทดสอบวิธีนี้ฉันคิดว่ามันใช้งานได้ดีสำหรับ 8.4.3> 8.4.6 (ตัวอย่าง) แต่ฉันได้รับข้อผิดพลาดสำหรับ 8.4.6> 8.5.x จะรายงานกลับเมื่อฉันเข้าใจ
ตัวอย่างข้อผิดพลาด:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
- symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
- symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
- drupal/core 8.5.0 requires symfony/yaml ~3.4.5 -> satisfiable by symfony/yaml[3.4.x-dev].
- Installation request for drupal/core 8.5.0 -> satisfiable by drupal/core[8.5.0].
- Installation request for symfony/console (locked at v3.2.8, required as ~3.2.8) -> satisfiable by symfony/console[v3.2.8].
โพสต์นี้โดย Jeff Geerling พูดถึงปัญหาที่คล้ายกัน แต่ยังไม่มีโชคสำหรับฉัน: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update
ดังนั้น ... สิ่งเดียวที่ดูเหมือนจะใช้ได้กับฉันสำหรับ 8.4.x> 8.5.x คือ "ตัวเลือกนิวเคลียร์" ที่ดูเหมือนว่าคนอื่น ๆ จะใช้ซึ่งทำงานcomposer update
อยู่
ฉันเดาว่ามันโอเคตราบใดที่คุณแน่ใจเกี่ยวกับโมดูลรุ่นใน composer.json บางทีเราควรล็อคมันลงไปเป็นเวอร์ชั่นปัจจุบัน ตัวอย่างเช่น:
"drupal/address": "1.3"
ค่อนข้างมากกว่า:
"drupal/address": "^1.3"
แต่คำตอบที่ถูกคืออะไร?
ตกลงคำตอบที่ดูเหมือนจะอยู่ทุกหนทุกแห่งคือทำ "ตัวเลือกนิวเคลียร์":
A. ลบ/vendor
โฟลเดอร์
B. เรียกใช้composer update
และเพียงอัปเดตโมดูลของคุณพร้อมกับคอร์ หรือล็อคโมดูลในเวอร์ชันcomposer.json
หากคุณไม่ต้องการอัปเดต
คนหนึ่งใน Drupal หย่อนกล่าวว่า"ปรัชญาทั้งนักแต่งเพลงคือการที่คุณควรได้รับการปรับปรุงแพคเกจได้บ่อยเท่าที่เป็นไปได้" แพคเกจรวมถึงโมดูลที่ฉันคิดว่า มันทำให้รู้สึกบางอย่างที่ฉันเดา
เมื่อฉันได้รับจาก 8.4.6 ถึง 8.5.0 สิ่งนี้ใช้ได้ผลดีที่จะได้รับจาก 8.5.0 ถึง 8.5.1 composer update drupal/core --with-dependencies
เช่นเดียวกับที่ทำกับ 8.4.3 ถึง 8.4.6
ฉันเริ่มที่จะสรุปว่า "คำตอบ" คือการลบโฟลเดอร์ผู้จัดจำหน่ายและไฟล์ composer.lock จากนั้นการใช้งานcomposer update
ก็ใช้ได้และผู้ใช้ควรตรวจสอบให้แน่ใจว่าหมายเลขรุ่นสำหรับการอ้างอิงในไฟล์ composer.json เป็นสิ่งที่คุณต้องการ . composer.json
มันไม่ได้ว่าข้อตกลงที่ยิ่งใหญ่ในการจัดการสิ่งที่รุ่นของโมดูลที่คุณต้องการเก็บหรืออนุญาตให้มีการปรับปรุงใน
ตัวอย่างเช่น:
"drupal/admin_toolbar": "1.18",
หมายถึงติดกับ 1.18
"drupal/admin_toolbar": "^1.18",
หมายถึงไปข้างหน้าและอัปเดต แต่ภายใน 1.x (ไม่ใช่ 2.x)
นี่คือการสำรองข้อมูลโดยความคิดเห็น (General Redneck) ในโพสต์นี้: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update
"หนึ่งในสิ่งที่ฉันได้ พบว่าฉันทำงานในการสนับสนุนคือการล็อคโมดูลรุ่นและแกนหลักเป็นความคิดที่ดีเพื่อให้คุณสามารถทำให้ร้อนในสิ่งที่คุณต้องการเพราะมีหลายครั้งที่ปลั๊กอินต่าง ๆ บางตัวไม่ต้องการทำงานอย่างถูกต้อง "
ยังไงก็ตามไฟล์ composer.lock ก็ไม่ได้ช่วยอะไรcomposer update
เพราะมันถูกพัดหายไป (ตรงข้ามกับcomposer install
ที่เขาล็อคไฟล์อ่าน):
วิ่งcomposer install
จะ:
- ตรวจสอบว่ามี
composer.lock
อยู่
- ถ้าไม่ทำดำเนินการ
composer update
เพื่อสร้าง
- หาก
composer.lock
มีอยู่ให้ติดตั้งรุ่นที่ระบุจากไฟล์ล็อค
วิ่งcomposer update
จะ:
- ตรวจสอบ
composer.json
- กำหนดเวอร์ชันล่าสุดเพื่อติดตั้งตามสเป็ครุ่นของคุณ
- ติดตั้งเวอร์ชันล่าสุด
- อัปเดต
composer.lock
เพื่อแสดงเวอร์ชันล่าสุดที่ติดตั้ง
Ref: https://www.engineyard.com/blog/composer-its-all-about-the-lock-file
ฉันเห็นนี้เป็นที่กล่าวถึงข้างต้น: https://github.com/drupal-composer/drupal-project ฉันเคยใช้มันและมันก็ดี แต่มันไม่ได้เป็นข้อกำหนดสำหรับการใช้ Composer กับ Drupal มันสับสนเพราะมัน "ฟัง" เหมือนมันมาจากชื่อ เมื่อฉันเริ่มต้นด้วย Drupal 8 ครั้งแรกฉันคิดว่ามันจำเป็นต้องมีดังนั้นจึงสร้างไซต์ D8 แรกของฉันด้วยการคิดว่ามันเป็นแนวปฏิบัติที่ดีที่สุด
Drupal "รุ่น" นั้นมี docroot ในโฟลเดอร์ a / web ไม่ใช่ในโฟลเดอร์ด้านบนของโครงการ นอกจากนี้ยังมีกลุ่มของสิ่งที่ถูกเพิ่มลงใน. gitignore เมื่อเทียบกับ Drupal ปกติ:
/drush/contrib/
/vendor/
/web/core/
/web/modules/contrib/
/web/themes/contrib/
/web/profiles/contrib/
/web/libraries/
ดังนั้น Drupal รุ่นนี้จึงมีความหมายมากกว่าสำหรับไซต์ที่ใช้การรวมอย่างต่อเนื่องเพื่อสร้าง Drupal ใหม่ในทุกการปรับใช้โดยใช้การติดตั้งผู้แต่ง หากคุณปรับใช้ด้วยวิธีปกติคุณต้องยอมรับข้อมูลทั้งหมดข้างต้นกับ git repo ของคุณไม่เช่นนั้นจะไม่ถูกปรับใช้กับเซิร์ฟเวอร์ของคุณ [1] และสิ่งนั้นจำเป็นสำหรับ Drupal ในการทำงาน
[1] ถ้า git เกี่ยวข้องกับการปรับใช้ของคุณ - ถ้าคุณปรับใช้กับ SFTP ให้ข้ามสิ่งนี้