เวิร์กโฟลว์การอัพเดทคอร์ที่เป็นพื้นฐานของผู้แต่งคืออะไร?


16

ฉันต้องการใช้นักแต่งเพลงเพื่อจัดการการพึ่งพา Drupal 8 แต่ฉันไม่แน่ใจว่าเวิร์กโฟลว์การอัพเดทหลักที่ถูกต้องคืออะไร ในขณะนี้ฉันใช้ drush เพื่ออัปเดต core เป็นรุ่นเบต้าล่าสุด แต่ฉันยังมีการอ้างอิงบางอย่างในไฟล์ composer.json ของฉันดังนั้นหลังจากการอัปเดตฉันใช้การติดตั้งผู้แต่งเพื่อติดตั้งการพึ่งพาผู้ขาย contrib ทั้งหมด ปรากฏว่าการรันcomposer installแทนที่ไฟล์บางไฟล์ในไดเรกทอรีหลักแม้ว่าฉันเพิ่งจะอัพเดตรุ่นหลักเป็นรุ่นล่าสุด

ฉันยังพยายามแก้ไขไฟล์ composer.json ด้วยตนเองและแทนที่บรรทัด "drupal / core" ด้วยรุ่นเบต้าเฉพาะเช่น"drupal/core": "~8.0-beta14",แต่มันยังแทนที่ไฟล์ในไดเรกทอรีหลัก

เวิร์กโฟลว์ที่ถูกต้องคืออะไร?

คำตอบ:


11

ฉันคิดว่าคุณใช้drupal-comper / drupal-projectเป็นพื้นฐานสำหรับโครงการของคุณ ถ้าไม่ลองดูโครงการนั้นและเปรียบเทียบกับของคุณ

นอกจากนี้คุณบอกว่าคุณต้องการใช้นักแต่งเพลงเพื่อจัดการการพึ่งพา Drupal 8 ดังนั้นฉันคิดว่าคุณได้เลือกโมดูล contrib ของคุณผ่าน composer require drupal/develdrush dl develมากกว่า

หากคุณทำสิ่งเหล่านี้ทั้งหมดคุณควรใช้composer updateเพื่ออัปเดต core Drupal และโมดูล contrib ทั้งหมดของคุณ ตราบใดที่คุณเก็บcomposer.lockไฟล์ของคุณcomposer installไม่ควรเปลี่ยนเวอร์ชันของการอ้างอิงใด ๆ ของคุณ คุณไม่ควรใช้drush pm-updateเลย มันไม่สำคัญสำหรับคุณว่าไฟล์ในcoreไดเรกทอรีจะได้รับการอัพเดตหรือไม่ก็ตามเนื่องจากไดเรกทอรีนี้ได้รับการจัดการโดย Composer คุณดีกว่าที่จะไม่ยอมรับไดเรกทอรีที่จัดการโดยผู้แต่งไปยังที่เก็บข้อมูลแม้ว่าคุณจะทำได้ถ้าต้องการ

แน่นอนคุณควรวิ่ง drush updatedbทุกครั้งcomposer updateแทนที่ Drupal core หรือโมดูลใด ๆ

เพื่อหลีกเลี่ยงการพัฒนาเวอร์ชันให้ตั้งค่าความเสถียรขั้นต่ำเป็น 'beta' ในไฟล์ composer.json โดยใช้ ธงเสถียรภาพนักแต่งเพลง

หากคุณใช้ drupal-comperer / drupal-project เพื่อจัดการเว็บไซต์ของคุณดังนั้นไฟล์ระดับรากทั้งหมดเช่น README.txt, .htaccess และ index.html จะเป็นเจ้าของโครงการของคุณ นั่นหมายความว่าคุณควรตรวจสอบในที่เก็บ git ของคุณ นักแต่งเพลงจะไม่อัปเดตคุณต้องอัปเดตด้วยตนเองเมื่อพวกเขาเปลี่ยน ไฟล์เหล่านี้ควรเปลี่ยนน้อยมาก แต่ Drupal-นักแต่งเพลง / Drupal โครงการมีสคริปต์เพื่อปรับปรุงแฟ้มเหล่านี้


สมมติว่าฉันใช้การอัปเดตผู้แต่งแทนที่จะอัปเดตตอนเช้าฉันจะอัปเดตไฟล์เช่น README.txt, .htaccess ฯลฯ ได้อย่างไร และทำไมการอัพเดตแบบ drush จึงให้แกนที่แตกต่างจากการปรับปรุงผู้แต่ง? และฉันควรแทนที่เวอร์ชั่นของ drupal ใน composer.json เป็น 8.0-betaX ก่อนการอัพเดทแต่ละครั้งหรือไม่ ฉันไม่ต้องการใช้ dev รุ่น ..
rreiss

อัปเดตคำตอบ
greg_1_anderson

+1 greg_1_anderson - ดูดีนี่เป็นวิธีที่ชัดเจนในการอัปเดตความปลอดภัยสำหรับ Drupal 8 หรือไม่ ด้วย D7 มันเป็น: drupal.stackexchange.com/a/71578
therobyouknow

ดูเหมือนว่าจะใช้งานได้ถ้ามีใครติดตั้ง Drupal 8.1 ในขั้นตอนเหล่านี้: drupal.org/node/2471553 (ฉันพบว่ามันใช้งานได้โดยไม่มีข้อผิดพลาด)
therobyouknow

"แน่นอนคุณควรเรียกใช้drush updatedbเมื่อใดก็ตามที่การปรับปรุงผู้แต่งแทนที่ Drupal core หรือโมดูลใด ๆ " - ขอบคุณและถ้าคุณได้ติดตั้ง drupal ในขั้นตอนแรก drupal.org/node/2471553คุณต้องใช้พา ธ เต็มรูปแบบไปยังDrushเฉพาะด้วย Drupal 8 ที่คุณติดตั้ง คุณต้อง cd ลงในเว็บก่อนและใน / web คำสั่งเพื่อปรับปรุง db ด้วยพา ธ เต็มจะเป็น: ../vendor/drush/drush/drush updatedb(ฉันพบสิ่งนี้เพื่อทำงาน)
therobyouknow

2

ต่อไปนี้จะเป็น 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 ให้ข้ามสิ่งนี้


composer update drupal/core symfony/config webflo/drupal-core-strict --with-dependenciesยังไม่เคยทำให้ฉันผิดหวัง ใช้งานได้กับรุ่นรองหลายรุ่นเช่น 8.3 -> 8.6
Clive

1

การใช้แพคเกจdrupal / coreบนpackagist.orgเราสามารถจัดการ core, โมดูล contrib (, ธีมและโปรไฟล์) และผู้ขายอื่น ๆ ผ่านทางผู้แต่ง

ฉันตั้งค่าไฟล์ต่อไปนี้ในไดเรกทอรีรากของฉันและดำเนินการแล้ว composer install

composer.json

{
  "require": {
    "composer/installers": "^1.0.20",
    "drupal/core": "8.0.*"
  },
  "extra": {
    "installer-paths": {
      "core": ["type:drupal-core"],
      "modules/contrib": ["type:drupal-module"],
      "profiles/contrib": ["type:drupal-profile"],
      "themes/contrib": ["type:drupal-theme"]
    }
  },
  "scripts": {
    "post-install-cmd": [
      "./post_install.sh"
    ]
  }
}

post_install.sh

#!/usr/bin/env bash
export RAW_DRUPAL="https://raw.githubusercontent.com/drupal/drupal/8.0.x"
curl $RAW_DRUPAL/example.gitignore > example.gitignore
curl $RAW_DRUPAL/.gitattributes > .gitattributes
curl $RAW_DRUPAL/.htaccess > .htaccess
curl $RAW_DRUPAL/.csslintrc > .csslintrc
curl $RAW_DRUPAL/.editorconfig > .editorconfig
curl $RAW_DRUPAL/.eslintrc > .eslintrc
curl $RAW_DRUPAL/.eslintignore > .eslintignore
curl $RAW_DRUPAL/index.php > index.php
curl $RAW_DRUPAL/update.php > update.php
curl $RAW_DRUPAL/web.config > web.config
curl $RAW_DRUPAL/autoload.php > autoload.php
curl $RAW_DRUPAL/robots.txt > robots.txt
mkdir -p sites/default
curl $RAW_DRUPAL/sites/example.sites.php > sites/example.sites.php
curl $RAW_DRUPAL/sites/development.services.yml > sites/development.services.yml
curl $RAW_DRUPAL/sites/example.settings.local.php > sites/example.settings.local.php
curl $RAW_DRUPAL/sites/default/default.services.yml > sites/default/default.services.yml
curl $RAW_DRUPAL/sites/default/default.settings.php > sites/default/default.settings.php

สนุก :)


ฉันเดาว่าฉันจะต้องใช้เวทย์มนตร์ที่ม้วนงอที่คุณทำ ฉันคาดหวังว่าไฟล์ทั้งหมดที่จำเป็นเหล่านี้จะถูกนำมาใช้แทนโดยนักแต่งเพลง
dxvargas

@hiphip ไฟล์นอกไดเรกทอรีหลักไม่เปลี่ยนแปลงบ่อยดังนั้นข้างต้นอาจเป็นสคริปต์ที่คุณดำเนินการด้วยตนเองเมื่อมีการอัปเดต drupal จากรุ่นรองหนึ่งไปเป็นรุ่นถัดไป (เช่น 8.1 ถึง 8.2)
Eyal

1

ใช่คุณสามารถจัดการ Drupal core ด้วยนักแต่งเพลง มีสองสิ่งที่ควรระวัง

คุณอาจจะได้รับการหมดเวลาเนื่องจากมีจำนวนผู้แต่งรายการที่ต้องผ่านโดยเฉพาะอย่างยิ่งถ้าคุณทำงานใน VM ท้องถิ่น หากคุณเรียกใช้composer installคุณจะพบข้อผิดพลาดของผู้แต่ง:

 [RuntimeException]                                    
  Could not delete core/.nfs0000000000000000000001:

ให้แน่ใจว่าคุณใช้ต้องการ

{
  "require": {
   "drupal/core": "8.3.*"

เพิ่มส่วนขยายให้กับไทม์เอาต์ในการกำหนดค่าด้วย

    "installer-paths": {
        "core": ["type:drupal-core"],
        "modules/contrib/{$name}": ["type:drupal-module"],
        "profiles/contrib/{$name}": ["type:drupal-profile"],
        "themes/contrib/{$name}": ["type:drupal-theme"],
        "drush/contrib/{$name}": ["type:drupal-drush"],
        "modules/custom/{$name}": ["type:drupal-custom-module"],
        "themes/custom/{$name}": ["type:drupal-custom-theme"]
    }
},

"config":{
            "process-timeout": 1600
       },

นอกจากนี้หากไม่ได้ทำงานคุณสามารถเรียกนักแต่งเพลงที่ติดตั้งจาก SSH ข้างนอกใน VM

สิ่งนี้จะข้ามการหมดเวลาใช้งาน NFS ใด ๆ และแกะ Drupal ในตำแหน่งที่ถูกต้อง


0

"drupal / core": "~ 8.0-beta14" หมายถึงการเปิดตัวที่มากกว่า 8.0-beta14 และน้อยกว่า 9! คุณจะต้องลบเครื่องหมายตัวหนอนเพื่อล็อคไปยังรุ่นที่ระบุ จากนั้นตรวจสอบให้แน่ใจว่าได้อัปเดตไฟล์ล็อคของคุณโดยเรียกใช้ผู้แต่งและในระบบเป้าหมายให้ใช้การติดตั้งผู้แต่ง

วิธีง่ายๆในการเริ่มต้นคือการสร้าง codebase โดยใช้https://github.com/drupal-composer/drupal-project

เมื่อเราต้องการอัปเดตบางอย่างเช่นการอัพเกรดคอร์คุณต้องเรียกใช้ "ผู้แต่ง" ในเครื่อง นี่จะอัปเดตไฟล์ composer.lock

เมื่อนักพัฒนารายอื่นดึงลงหรือในสคริปต์การปรับใช้คุณจะเรียกใช้ "ผู้แต่งติดตั้ง" ซึ่งใช้ไฟล์ล็อค

บรรทัดใน composer.json ของเราสำหรับ Drupal core คือ:

"drupal/core": "~8.0",

ตัวหนอน () หมายถึงการเปิดตัวใด ๆ ภายในจำนวน 8 ( แต่ไม่ใช่ 9)

หากคุณต้องการล็อคเป็นรุ่นเฉพาะคุณไม่ควรใช้เครื่องหมายตัวหนอน

"drupal/core": "8.0-beta14",

จากนั้นเรียกใช้ "ผู้แต่งขึ้น" ในพื้นที่ยอมรับไฟล์ composer.json และ composer.lock จากนั้นเรียกใช้ "การติดตั้งผู้แต่ง" ในการติดตั้งอื่น ๆ หลังจากดึง codebase ลง

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