CLI में MAGE_DIRS बूटस्ट्रैप पैरामीटर


11

में pub/index.php, निम्न कोड मीडिया और छोड़ "/ पब" स्थिर संपत्ति के लिए सेट परिवर्तन यूआरएल के लिए इस्तेमाल किया जाता है:

$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);

दुर्भाग्य से सीएलआई लिपियों ( bin/magento) में ऐसा कुछ नहीं है।

मुझे Magento\Setup\Mvc\Bootstrap\InitParamListenerनिम्न कोड वाला वर्ग मिला :

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

लेकिन मुझे समझ नहीं आ रहा है कि यह Zend Service Manager डेटा कहां से प्राप्त करता है और इसे कैसे प्रभावित करना संभव हो सकता है।

मेरी ठोस समस्या यह है कि एक अनुक्रमणिका को पूर्ण URL जनरेट करना है और वर्तमान में इसे पसंद करना है http://magento.local/pub/media/..., जहाँ मुझे इसकी आवश्यकता हैhttp://magento.local/media/...

मैं CLI को कैसे बता सकता हूं कि मेरा वर्चुअल होस्ट pub"और" पब URL का हिस्सा नहीं होना चाहिए?

आदर्श रूप से यह अतिरिक्त सीएलआई मापदंडों या पर्यावरण चर पर भरोसा किए बिना काम करना चाहिए।


2
इसे हाल ही में बग के रूप में रिपोर्ट किया गया है: github.com/magento/magento2/issues/8868
स्कॉट बुकानन

1
मैंने पाया कि आप जैसे तर्क का उपयोग करके इसे सेट कर सकते हैं --magento-init-params=MAGE_DIRS[media][uri]=media। यह वास्तव में सभी आदेशों के लिए काम करता है (कोड के माध्यम से कदम से स्पष्ट), लेकिन setup:नाम स्थान के बाहर के आदेश गलत तरीके से एक त्रुटि देते हैं कि विकल्प मौजूद नहीं है।
स्कॉट बुकानन

@ScottSB बिल्कुल वैसा नहीं जैसा मैं उम्मीद कर रहा था, लेकिन फिर भी एक दिलचस्प खोज, इसके लिए धन्यवाद!
फाबियन शेंगलर

जवाबों:


7

बहुत ट्रैवेल के बाद, मुझे पर्यावरण चर का उपयोग करके एक समाधान मिला, जो मुझे पता है कि वह नहीं है जो आप चाहते थे। आप इस तरह पर्यावरण चर का उपयोग कर मापदंडों को निर्धारित कर सकते हैं ( $APP_ROOTअपने वास्तविक Magento रूट के साथ प्रतिस्थापित ):

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

मुख्य वास्तुकार से इस जवाब का श्रेय मुझे खुशबू पर डालने के लिए दिया जाता है:

Magento के "var" निर्देशिका को दूसरी जगह Magento 2 में कैसे बदलें?


आप पर्यावरण चर का उपयोग कैसे करते हैं? क्या इन्हें संदर्भित उत्तर की तरह VHOST में जोड़ा जा रहा है?
हारिज

@ श्री को मैं आपके प्रश्न को नहीं समझता। क्योंकि यह CLI कमांड के बारे में बात कर रहा है, एक vhost प्रासंगिक नहीं है, क्योंकि वेब सर्वर इसमें शामिल नहीं है। पर्यावरण चर को सही रूप में कमांड लाइन पर पारित किया जाता है ( इस मामले में अंत में कमांड के लिए पर्यावरण चर के रूप में सेट किए envगए स्वरूप में तर्क दिए गए हैं )। FOO=barbin/magento
स्कॉट बुकानन

मेरे लिए मैं इस समस्या को क्रॉन के माध्यम से चलाने के तरीके के साथ प्राप्त कर रहा हूं, इसलिए यदि मेरे बिन / मैजेंटो क्रोन के साथ इस को खत्म करने का कोई तरीका नहीं है तो सुनिश्चित करें: क्रॉस्टैब में चलाएं?
हरिन

बस वही लें जो मेरे पास उत्तर में है और उसके indexer:reindexसाथ बदलें cron:run(और अभी भी $ APP_ROOT को अपडेट करें)। फिर उस पूरी चीज को क्रॉस्टैब में गिरा दें। यकीन नहीं होता है कि क्या क्रेतेब को नए सिरे से पसंद करेंगे, इसलिए आप उन्हें रिक्त स्थान के साथ बदल सकते हैं (उस मामले में पीछे की ओर पीछे हटने से)।
स्कॉट बुकानन

मुझे लगता है कि बेहतर समाधान यहाँ है 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_DIRSCLI के माध्यम से सेट करने का एक और तरीका मिला , बस कॉपी

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

सेवा

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

और अब आप सभी आंतरिक फ़ाइलों की डिफ़ॉल्ट निर्देशिका को बदल सकते हैं।


thx ने मुझे cli और webapp के लिए कैशे फोल्डर को बदलने में मदद की; D
ZFNerd

वास्तव में मेरा मानना ​​है कि यह इस समस्या का सबसे अच्छा समाधान है। आधिकारिक मैगेंटो गाइड कोर को अनुकूलित करने के लिए उपयोग करने / परिवाद / आंतरिक की सिफारिश करता है। devdocs.magento.com/guides/v2.3/altecture/archi_perspectives/…
A.Maksymiuk

1
@ A.Maksymiuk मेरा मानना ​​है कि आप उस पृष्ठ को गलत समझ रहे हैं। यह ध्यान नहीं दे रहा है कि एक्सटेंशन डेवलपर्स के लिए कोड उपयोगी हो सकता है, लेकिन यह सीधे वहां कोर को कस्टमाइज़ करने की अनुशंसा नहीं कर रहा है। इससे पहले पृष्ठ पर यह कहता है: "आपको फ़्रेमवर्क फ़ाइलों को कभी भी संशोधित नहीं करना चाहिए, हालांकि यदि आप मैगेंटो का विस्तार कर रहे हैं, तो आपको पता होना चाहिए कि फ्रेमवर्क लाइब्रेरी कैसे कॉल करें।"
स्कॉट बुकानन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.