MAGE_DIRS พารามิเตอร์ bootstrap ใน CLI


11

ในpub/index.phpรหัสต่อไปนี้จะใช้ในการตั้งค่าการเปลี่ยน URL สำหรับสื่อและสินทรัพย์คงที่เพื่อละเว้น "/ pub":

$params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [
    DirectoryList::PUB => [DirectoryList::URL_PATH => ''],
    DirectoryList::MEDIA => [DirectoryList::URL_PATH => 'media'],
    DirectoryList::STATIC_VIEW => [DirectoryList::URL_PATH => 'static'],
    DirectoryList::UPLOAD => [DirectoryList::URL_PATH => 'media/upload'],
];
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);

น่าเสียดายในสคริปต์ CLI ( bin/magento) ไม่มีอะไรเช่นนี้

ฉันพบชั้นเรียนMagento\Setup\Mvc\Bootstrap\InitParamListenerด้วยรหัสต่อไปนี้:

$initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM);
$directoryList = $this->createDirectoryList($initParams);

แต่ฉันไม่เข้าใจว่าตัวจัดการบริการ Zend นี้ดึงข้อมูลและวิธีที่เป็นไปได้ที่จะมีอิทธิพลต่อข้อมูลอย่างไร

ปัญหาที่เป็นรูปธรรมของฉันคือตัวสร้างดัชนีจะต้องสร้าง URL แบบเต็มและในปัจจุบันก็ชอบhttp://magento.local/pub/media/...ที่ฉันต้องการให้เป็นhttp://magento.local/media/...

ฉันจะบอก CLI ได้อย่างไรว่าโฮสต์เสมือนของฉันชี้ไปที่pubและ "pub" ไม่ควรเป็นส่วนหนึ่งของ URL

เป็นการดีที่สิ่งนี้จะทำงานได้โดยไม่ต้องพึ่งพาพารามิเตอร์ CLI เพิ่มเติมหรือตัวแปรสภาพแวดล้อม


2
สิ่งนี้เพิ่งถูกรายงานว่าเป็นข้อผิดพลาด: github.com/magento/magento2/issues/8868
Scott Buchanan

1
--magento-init-params=MAGE_DIRS[media][uri]=mediaผมพบว่าคุณสามารถตั้งค่านี้ใช้อาร์กิวเมนต์เช่น ใช้งานได้จริงสำหรับคำสั่งทั้งหมด (เห็นได้จากการก้าวผ่านโค้ด) แต่คำสั่งภายนอกsetup:เนมสเปซไม่ถูกต้องให้ข้อผิดพลาดว่าไม่มีตัวเลือก
Scott Buchanan

@ScottSB ไม่ใช่สิ่งที่ฉันหวังไว้ แต่ก็ยังเป็นสิ่งที่น่าสนใจขอบคุณสำหรับสิ่งนั้น!
Fabian Schmengler

คำตอบ:


7

หลังจากพบปัญหามากฉันพบวิธีแก้ปัญหาโดยใช้ตัวแปรสภาพแวดล้อมซึ่งฉันรู้ว่าไม่ใช่สิ่งที่คุณต้องการ คุณสามารถตั้งค่าพารามิเตอร์โดยใช้ตัวแปรสภาพแวดล้อมเช่นนี้ (แทนที่$APP_ROOTด้วย Magento root ที่แท้จริงของคุณ):

env \
    "MAGE_DIRS[base][path]=$APP_ROOT" \
    "MAGE_DIRS[pub][uri]=" \
    "MAGE_DIRS[media][uri]=media" \
    "MAGE_DIRS[static][uri]=static" \
    "MAGE_DIRS[upload][uri]=media/upload" \
    bin/magento indexer:reindex

โปรดทราบว่าจำเป็นต้องระบุพา ธ ฐานดังกล่าวข้างต้นเพราะเมื่อคุณใช้ตัวแปรสภาพแวดล้อมMAGE_DIRSคำจำกัดความของคุณจะเขียนทับค่าเริ่มต้นเริ่มต้นที่รวมไว้ มันจะได้ \Magento\Framework\App\Filesystem\DirectoryListแต่ได้รับรวมกับการตั้งค่าเริ่มต้นในฟูลเลอร์

ให้เครดิตกับคำตอบนี้จากหัวหน้าสถาปนิกเองที่ทำให้ฉันมีกลิ่น:

วิธีการเปลี่ยนไดเรกทอรี "var" ของ Magento เป็นสถานที่อื่นใน Magento 2


คุณใช้ตัวแปรสภาพแวดล้อมอย่างไร การเพิ่มเข้ามาใน VHOST เป็นเหมือนคำตอบที่อ้างอิงหรือไม่
harri

@harri ฉันไม่เข้าใจคำถามของคุณ เนื่องจากสิ่งนี้พูดถึงคำสั่ง CLI vhost จึงไม่เกี่ยวข้องเนื่องจากเว็บเซิร์ฟเวอร์ไม่เกี่ยวข้อง ตัวแปรสภาพแวดล้อมถูกส่งผ่านไปทางขวาบนบรรทัดคำสั่งดังที่แสดง (อาร์กิวเมนต์envในรูปแบบFOO=barรับการตั้งค่าเป็นตัวแปรสภาพแวดล้อมสำหรับคำสั่งในตอนท้ายในกรณีนี้bin/magento)
สกอตต์บูคานัน

อาสำหรับฉันฉันได้รับปัญหานี้ด้วยวิธีการทำงานผ่าน cron ดังนั้นไม่แน่ใจว่ามีวิธีที่จะทำสิ่งนี้ด้วย bin / magento cron ของฉัน: ทำงานใน crontab หรือไม่
harri

เพียงใช้สิ่งที่ฉันมีในคำตอบและแทนที่indexer:reindexด้วยcron:run(และยังคงอัปเดต $ APP_ROOT เช่นกัน) จากนั้นวางสิ่งทั้งหมดลงใน crontab ไม่แน่ใจว่า crontab จะชอบบรรทัดใหม่หรือไม่ดังนั้นคุณสามารถแทนที่ด้วยช่องว่างได้ (ลบเครื่องหมายแบ็กสแลชต่อท้ายในกรณีนั้น)
Scott Buchanan

ฉันคิดว่าทางออกที่ดีกว่าอยู่ที่นี่magento.stackexchange.com/a/174503/41325
A.Maksymiuk

6

อีกตัวเลือกที่ง่ายกว่าคือการกำหนดรหัสเส้นทางสื่อในการกำหนดค่าร้านค้าภายใต้ร้านค้า> การกำหนดค่า> เว็บเพื่อ:

{{unsecure_base_url}}media/

และ

{{secure_base_url}}media/

เครดิตเนื่องจากhttps://github.com/magento/magento2/issues/9111#issuecomment-292002922


2

ฉันพบวิธีอื่นในการตั้งค่าMAGE_DIRSผ่าน CLI เพียงคัดลอก

/vendor/magento/framework/App/Filesystem/DirectoryList.php

ถึง

/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php 

และตอนนี้คุณสามารถเปลี่ยนไดเรกทอรีเริ่มต้นของไฟล์ภายในทั้งหมด


ขอบคุณสิ่งนี้ช่วยให้ฉันเปลี่ยนโฟลเดอร์แคชสำหรับ cli และ webapp; D
ZFNerd

ที่จริงฉันเชื่อว่านี่เป็นทางออกที่ดีที่สุดของปัญหานี้ คู่มือ Magento อย่างเป็นทางการแนะนำให้ใช้ / lib / ภายในเพื่อปรับแต่งแกนกลาง devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/…
A.Maksymiuk

1
@ A.Maksymiuk ฉันเชื่อว่าคุณเข้าใจผิดในหน้านั้น มันเป็นที่สังเกตว่ารหัสอาจมีประโยชน์สำหรับนักพัฒนาส่วนขยาย แต่ไม่แนะนำให้ปรับแต่งแกนตรงนั้น ก่อนหน้านี้บนหน้าเพจระบุว่า: "คุณไม่ควรแก้ไขไฟล์ Framework แม้ว่าคุณจะขยาย Magento ไปแล้วคุณต้องรู้จักวิธีเรียกใช้ไลบรารี Framework"
Scott Buchanan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.