GIT และกลยุทธ์การปรับใช้โครงการ Magento2


92

ด้วย Magento 1 ฉันใช้เครื่องมือปรับใช้ที่ดึงใน repo ของ GIT รันคำสั่งเช่นนั้นmodman deploy-allและทำให้แน่ใจว่าvarไดเรกทอรีนั้นสามารถเขียนได้ สำหรับ.gitignoreฉันใช้อันนี้ซึ่งทำงานได้ค่อนข้างดี

แต่แล้วMagento 2ล่ะ?

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

คำถามจะยังคงเปิดอยู่สักพัก


Good question @sander Mangel
Amit Bera

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

@ ฟิลลิ่งมันอาจจะกว้าง แต่เห็นได้ชัดว่าไม่กว้างเกินไปเนื่องจากได้รับคำตอบแล้ว 3 คำตอบ ตามที่กล่าวไว้ที่นี่: meta.magento.stackexchange.com/questions/745/… Meta จะใช้สำหรับคำถามเกี่ยวกับ MageSE ไม่ใช่การโพสต์ / คำถามแบบสุ่มหากคุณต้องการลบฉันไม่สามารถหยุดคุณได้ แต่ดูเหมือนว่ามีคนจำนวนมาก ผู้คนสนใจในคำถามนี้และในความเห็นของฉันมันเป็นสิ่งที่ถูกต้องไม่ว่าจะเฉพาะเจาะจงมากเกินไป
Sander Mangel

สองสิ่งที่: First, ซานเดอร์ที่ถูกต้องเกี่ยวกับ Meta - ควรเพียง แต่นำมาใช้สำหรับคำถามเกี่ยวกับแพลตฟอร์ม SE ที่เกี่ยวข้องกับวีโอไอพี SE (หมายเหตุ: เราได้อาจจะไม่จับตาดู Meta ดีพอที่จะเสริมสร้างกฎนี้) ประการที่สอง "ผู้คนจำนวนมาก [สนใจ]" คำถามไม่มีอะไรเกี่ยวข้องกับคำถามที่สามารถตอบได้อย่างเป็นทางการหรือไม่ (และด้วยความเหมาะสมของคำถามในรูปแบบ StackExchange) มันน่าผิดหวังอย่างแน่นอน (ฉันเคยคิดเรื่องนี้มาก่อน) ฉันอยากรู้ว่ากระทู้นี้จะไปที่ไหน บางที A สามารถระบุได้ดีพอที่จะเป็น "สิทธิ" โดยเฉพาะ ...
benmarks

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

คำตอบ:


56

ขั้นตอนด้านล่างอธิบายวิธีตั้งค่าสภาพแวดล้อมสำหรับการพัฒนาโมดูลที่กำหนดเองไม่ใช่เพื่อการผลิต

การเริ่มต้นโครงการ

  1. เพิ่มข้อมูลประจำตัว repo.magento.comและโทเค็นการเข้าถึง githubไปยังauth.jsonในโฮมไดเร็กตอรี่ของผู้แต่ง
  2. สร้างโครงการโดยใช้คำสั่งต่อไปนี้:

    composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition .

  3. ใช้. gignignore นี้และใส่ลงในรูทโครงการของคุณ ไฟล์ / ไดเรกทอรีหลักเกือบทั้งหมดได้ถูกเพิ่มเข้าไปในรูท.gitignoreแล้ว แต่จะเป็นการดีกว่าถ้าเพิ่ม 2 ต่อไปนี้เช่นกัน/updateและ/phpserver(เพียงเพิ่ม 2 บรรทัดเหล่านี้ใน. gitignore)

  4. เริ่มต้นพื้นที่เก็บข้อมูล git ใหม่ในรูทโปรเจ็กต์
  5. เพิ่มไฟล์ที่ไม่ได้ติดตามทั้งหมดเพื่อคอมไพล์และคอมมิท
  6. เริ่มพัฒนาโมดูลของคุณตามปกติ (วางไว้ใต้app/code/VendorName/ModuleName) ตอนนี้คุณจะมีเฉพาะโค้ดที่คุณกำหนดเองในที่เก็บ git ของคุณ

การติดตั้ง Magento

  1. ตรวจสอบให้แน่ใจว่าสิทธิ์ระบบไฟล์ทั้งหมดได้รับการตั้งค่าตามที่ระบุไว้ในคู่มืออย่างเป็นทางการ
  2. ติดตั้ง Magento โดยใช้บรรทัดคำสั่งเช่น:

    ${project_root}/bin/magento setup:install \ --db-host=localhost \ --db-name=magento \ --db-user=root \ --backend-frontname=admin \ --base-url=http://base.url.goes.here/ \ --language=en_US \ --timezone=America/Chicago \ --currency=USD \ --admin-lastname=Admin \ --admin-firstname=Admin \ --admin-email=admin@example.com \ --admin-user=admin \ --admin-password=123123q \ --cleanup-database \ --use-rewrites=1

  3. เปิดใช้งาน cron indexers เช่นบน Ubuntu:

    echo "* * * * * php ${project_root}/bin/magento cron:run &" | crontab -u www-data -

  4. Magento จะทำงานในdefaultโหมดและเนื้อหาที่หายไปทั้งหมดจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อมีการร้องขอครั้งแรก ดังนั้นไม่จำเป็นต้องเรียกใช้คอมไพเลอร์หรือปรับใช้เนื้อหาแบบคงที่
  5. [ไม่บังคับ] หากใช้ PHP Storm ให้รันคำสั่งต่อไปนี้เพื่อเปิดใช้งานการรองรับ XSD:

    bin/magento dev:urn-catalog:generate .idea/misc.xml


สวัสดีอเล็กซ์. การเริ่มต้นโครงการขั้นตอนที่ 3 - คุณช่วยขยายออกไปหน่อยได้ไหม? คุณคิดว่าคุณต้องคัดลอกไดเรกทอรีย่อยนั้นไปยังรูทด้วยตนเองหรือไม่ (ฉันสงสัยว่ามีบางสิ่งบางอย่างที่ทำงานไม่ถูกต้องหรือไม่ฉันไม่ได้คาดหวังว่าขั้นตอนนั้นจะเป็นเช่นนั้น)
Alan Kent

@AlanKent ปัจจุบันคุณได้รับไฟล์ที่เกี่ยวข้องกับวีโอไอพีที่ดาวน์โหลดมาvendorรวมถึงmagento2-baseซึ่งเป็นเพียงโครงกระดูกสำหรับโครงการใหม่ ไม่แน่ใจว่าทำไมขั้นตอนนี้ไม่ได้รับการกำหนดค่าให้ทำโดยอัตโนมัติโดยผู้แต่งจะพยายามค้นหา เกี่ยวกับ.gitignoreการคัดลอกจาก repo อื่นมันกำลังถูกกล่าวถึงแล้ววิธีการกำจัด / ลดความซับซ้อนของขั้นตอนนี้
Alex Paliarush

ขั้นตอนที่ 3 ไม่จำเป็นต้องใช้ marshaling ของไฟล์ / โฟลเดอร์เสร็จสิ้นในระหว่างขั้นตอนที่ 2
Maddy

ขอบคุณ @Maddy @ AlanKent magento2-baseไม่จำเป็นต้องคัดลอกไปที่รูทอีกต่อไป (เพิ่งยืนยัน) ดูเหมือนว่าจะได้รับการแก้ไขเร็ว ๆ นี้ ลบขั้นตอนนี้ออกจากคำตอบ
Alex Paliarush

1) ฉันใส่รหัสทั้งหมดของฉันลงบน repo ซึ่งไม่มีการติดตั้งแล้วและทุกอย่างเมื่อฉันดึงจาก repo นั้นและเพียงแค่เปลี่ยนการตั้งค่าที่ป้อมผู้ดูแลระบบ pangel และข้อมูลประจำตัวของ db ทุกอย่างจะทำงานอย่างถูกต้องหรือไม่ 2) เนื่องจากฉันลืมแยก var / และ pub / โฟลเดอร์ในระหว่างการพุชฉันสามารถลบมันทั้งหมดเพื่อให้พวกเขาสามารถลบรีโมต repo พวกเขาจะสร้างใหม่อีกครั้งหรือไม่ ขอบคุณ
Lachezar Raychev

25

สำหรับการเริ่มต้นและการติดตั้งทำตามขั้นตอนจาก Alex คำตอบของเขาสำหรับขั้นตอนส่วนใหญ่มีเพียงความแตกต่างที่ฉันอยากจะแนะนำ:

การกำหนดค่า Git

เก็บไฟล์ต่อไปนี้ในที่เก็บ Git ของคุณเท่านั้น:

  • composer.json
  • composer.lock
  • app / etc / config.php

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

การปรับใช้

ในระหว่างการพัฒนาคุณทำการอัพเดตโมดูลบนสภาวะแวดล้อมของคุณ (dev / test) ด้วยคำสั่ง:

composer update

สิ่งนี้จะอัพเดตไฟล์ composer.lock ด้วยเวอร์ชันที่ติดตั้งในการติดตั้งนั้น

ในการเตรียมเตริง / การผลิตล่วงหน้า / การผลิตคุณสามารถสร้าง / ติดตั้งการตั้งค่าเดียวกันด้วยคำสั่ง:

git pull
composer install

สิ่งนี้จะติดตั้งโมดูลเดียวกันทั้งหมดที่ใช้ในการพัฒนา / ทดสอบเพื่อให้แน่ใจว่าการทดสอบก่อนที่จะเผยแพร่ไปยังการผลิตจะทำด้วยรุ่นโมดูลเดียวกันกับที่ได้รับการพัฒนาด้วย

หลังจากการติดตั้งเพื่อเรียกใช้คำสั่งต่อไปนี้:

bin/magento setup:upgrade
bin/magento setup:di:compile (or setup:di:compile-multi-tenant)
bin/magento setup:static-content:deploy

สิ่งนี้จะอัพเดตฐานข้อมูล (สคีมาและการอัพเกรดข้อมูล) สร้างการกำหนดค่า DI และปรับใช้ไฟล์มุมมองแบบคงที่ทั้งหมด


บางทีมันสมเหตุสมผลแล้วที่จะใช้ข้อมูลตัวอย่างแทนที่จะสร้างฟิกซ์เจอร์? อุปกรณ์ติดตั้งจะบรรจุเฉพาะโมดูลที่สำคัญที่สุดและดูเหมือนว่ามีประโยชน์สำหรับการทดสอบประสิทธิภาพเท่านั้น
Alex Paliarush

ขอขอบคุณลบส่วนนั้นออกเนื่องจากไม่จำเป็นเมื่อใช้ไซต์ในการผลิต
Vladimir Kerkhoff

สิ่งนี้เป็นไปตามแนวทางที่ฉันใช้อย่างใกล้ชิด สิ่งนี้ยังทำงานได้ดีกับ Magento 1 เช่นกัน (ด้วยกระบวนการสร้างที่ซับซ้อนน้อยกว่า) ให้นักแต่งเพลงทำงานได้ดีสำหรับการปรับใช้ที่ดีมากในประสบการณ์ของฉันและเราไม่เห็นข้อเสียอื่น ๆ นอกเหนือจากความซับซ้อนด้วยกลยุทธ์ อย่าเดินตามรอยเท้าที่เล็กลงในคอมไพล์
Aepod

การติดตั้งนี้ดูเหมือนว่า 'ผู้รวมระบบ' มันเพิ่ม repos ในผู้ขาย / magento / * ไม่มีรหัสจะอยู่ในแอพ / รหัส / .. และ dirs อื่น ๆ ฉันจะมีวีโอไอพี core 2 ได้อย่างไรในไฟล์. zip เป็นไปได้ไหมที่จะเพิ่มผ่านผู้ประพันธ์โมดู (อื่น ๆ คอมไพล์ git) และกว่าจะจบลงในแอพ / รหัส / ... โดยอัตโนมัติ?
ปิดบัง

4
ความเสี่ยงนักแต่งเพลงไม่ใช่เครื่องมือปรับใช้ หากสิ่งที่ล้มเหลวในนักแต่งเพลงที่ติดตั้งเมื่อใช้ในการผลิต ...
Claudiu Creanga

3

Re. gitignore, 2.2 คำตอบของวีโอไอพีอย่างเป็นทางการเป็นต้นไปจะเป็น "config.php เข้าไปใน git, env.php ไม่ได้"

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

ผมค่อนข้างชอบใช้นักแต่งเพลง "เส้นทาง" ประเภทพื้นที่เก็บข้อมูลที่มีเส้นทางของ../othergitrepo/app/code/*/*ที่จะรับโมดูล แต่จะใช้ symlinks ที่ไม่ทำงานได้ดีกับสภาพแวดล้อม dev ใช้พร้อมเพรียงกันหรือคล้ายกัน


3

เราใช้วิธีการที่แตกต่างกันซึ่งไม่เกี่ยวข้องกับการสร้างเซิร์ฟเวอร์ / กระบวนการที่แยกจากกันเราพัฒนาในพื้นที่เสมือนในการผลิต

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

การใช้เวอร์ชั่นที่เหมาะสำหรับการพัฒนา แต่ยังทำงานในโหมดการผลิตก็เป็นส่วนที่ยุ่งยากและยังไม่สมบูรณ์ แต่ตอนนี้เรามีสูตรที่ใช้งานได้

เหตุผลก็คือเราต้องการควบคุม 100% ว่าโค้ดอะไรที่จะใช้งานจริง เนื่องจาก magento2 สร้างรหัสจำนวนมากเราต้องเรียกใช้งานในพื้นที่เพื่อให้สามารถเข้าใจเอฟเฟกต์ทั้งหมดและสามารถแก้ไขข้อบกพร่องได้เหมือนในการผลิต

ฉันรู้ว่านี่ไม่ใช่สิ่งที่หลายคนแนะนำ แต่ที่ดีที่สุดสำหรับเรา

ขั้นตอนการตั้งค่าส่วนหน้า

เพื่อให้สคริปต์เหล่านี้จะทำงานตั้งร้านค้าของคุณเพื่อการผลิตในโหมด env.php dev/tools/grunt/configs/themes.jsและการตั้งค่าของคุณในรูปแบบของคุณ (ขั้นตอนต่อไปนี้ถูกใส่ลงในเพลย์บุ๊ค ansible)

  1. ลบ var/cache
  2. ลบ var/view_preprocessed
  3. ลบpub/static/*(อย่าลบ. htaccess)
  4. ลบ var/composer_home
  5. วิ่ง php bin/magento cache:flush
  6. วิ่ง php bin/magento setup:static-content:deploy %your_languages%
  7. ลบชุดรูปแบบ / ภาษาทั้งหมดที่คุณไม่ได้ใช้จาก pub / static / frontend
  8. ลบสำเนาของไฟล์ที่น้อยกว่าออกจาก pub/static/frontend
  9. วิ่ง php bin/magento dev:source-theme:deploy --locale="%your_language%" --theme="%your_theme%" css/styles-m css/styles-l css/email css/email-inline
  10. ไม่บังคับ: เราใช้ bash-script เพื่อเปลี่ยน symlink แบบสัมบูรณ์ซึ่งสร้างขึ้นในขั้นตอนที่ 9 เป็นรายการที่สัมพันธ์กันทำให้สามารถเรียกใช้ grunt จากนอก vm ได้
  11. วิ่ง grunt less:your_theme

แบ็กเอนด์ / ขั้นตอนการตั้งค่า

  1. ลบ var/cache
  2. ลบ var/generation
  3. ลบ var/composer_home
  4. ลบ var/di
  5. วิ่ง php bin/magento cache:flush
  6. วิ่ง php bin/magento setup:di:compile

ขอบคุณสำหรับ @ greenone83 นี้เป็นวิธีที่ฉันใช้เป็นหลักแม้ว่าฉันจะสร้างแบ็กเอนด์ของฉันเป็นส่วนหนึ่งของส่วนหน้า ฉันไม่เคยใช้การตั้งค่า: di: รวบรวมตามที่ฉันพบมันกรูสิ่งต่าง ๆ ขึ้น! สิ่งหนึ่งที่ฉันไม่เข้าใจคือเหตุผลที่ตั้งค่า: เนื้อหาคงที่: ปรับใช้สร้างไฟล์ในสร้าง / รหัส (สถานที่มีการเปลี่ยนแปลงจากการโพสต์ของคุณ)? ฉันพบว่าถ้าฉันลบทั้งหมดที่สร้าง / รหัสกับเว็บไซต์ของฉันในโหมดการผลิตไฟล์เหล่านี้จะถูกสร้างขึ้นโดยอัตโนมัติเมื่อฉันเรียกดูรอบ ๆ เว็บไซต์
PedroKTFC

2

คุณควรละเว้นไฟล์เหล่านี้ด้วย
/app/etc/config.php
/app/etc/env.php
/.idea/workspace.xml // phpstorm


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