मैगेंटो 2 पब स्टैटिक फाइलों के लिए डिफ़ॉल्ट या उत्पादन मोड में साइमलिंक का उपयोग करें


11

स्थिति: मैं Magento 2 के कुछ मुफ्त परीक्षण चला रहा हूं और VPS पर सीमित HD स्थान है। इस कारण से एचडी स्पेस में कटौती करने के लिए मैं डिफ़ॉल्ट या प्रोडक्शन मोड में फाइलों को मैगेंटो सिमलिंक करना चाहता हूं। मैंने देखा है कि एक डिफ़ॉल्ट Magento 2 स्थापित 420mb के बारे में एक बार साइट पहले चलाता है यह 770mb के आसपास चला जाता है, तो इसमें से 350mb फ़ाइलों की प्रतिलिपि बनाई जाती है।

मैंने संशोधित किया है: एप्लिकेशन / etc / di.xml लाइन:

 <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item>

सेवा

 <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>

यह ठीक काम करता है और साइट डिफ़ॉल्ट मोड में होने पर भी ठीक से सिम्लिंक बनाएगी। हालाँकि मुद्दा यह है कि css नहीं बना है या js-translation.json उन फ़ाइलों को बनाता है जिन्हें इसे बनाना चाहिए लेकिन वे नहीं हैं:

/pub/static/version1488209436/frontend/Magento/luma/en_US/css/styles-m.css

/pub/static/version1488209436/frontend/Magento/luma/en_US/css/styles-l.css

/pub/static/version1488209436/frontend/Magento/luma/en_US/css/print.css

/pub/static/version1488209436/frontend/Magento/luma/en_US/js-translation.json

तो सवाल यह है: मैं डिफ़ॉल्ट या प्रोडक्शन मोड में और सिम्लिंक का उपयोग करते समय मैगेंटो को भी इन फ़ाइलों को कैसे बनाते हैं?


शायद आप सीएसएस मुद्दे के लिए गल्प या ग्रंट का उपयोग कर सकते हैं: magento.stackexchange.com/questions/162906/… और js-translation.json फ़ाइल के लिए अलग-अलग मोड में देखें? gist.github.com/antonmakarenko/7538216
B00MER

धन्यवाद, मैं इसे +100 तक बढ़ा दूंगा अगर कोई मुझे कदम से कदम दे सकता है और इसे सत्यापित कर सकता है।
केविन शावेज

पब / स्टैटिक फोल्डर के अंदर एक .htaccess फाइल होती है, जो url को फिर से लिखने और url से 'version1488209436' को हटाने और एक यूजर फ्रेंडली url प्रदान करने के लिए जिम्मेदार है। यदि .htaccess ठीक से काम नहीं कर रहा है, तो केवल इस प्रकार के मुद्दे हुए।
टोनमोय

धन्यवाद @Tonmoy लेकिन यह इस से संबंधित नहीं है। मुद्दा यह है कि फाइलें उत्पन्न नहीं होती हैं क्योंकि मैं डिफ़ॉल्ट / उत्पादन मोड में कॉपी होने के बजाय सिम्बलिंक का उपयोग कर रहा हूं।
केविन चावेज़

चूँकि 4 फाइलें हैं, जिससे आप उन सिमलाइन को मैन्युअल रूप से या .sh स्क्रिप्ट में बना सकते हैं।
अस्पष्ट

जवाबों:


6

app/etc/di.xml: इसमें नया आइटम जोड़ें stategiesList:

<virtualType name="developerMaterialization" type="Magento\Framework\App\View\Asset\MaterializationStrategy\Factory">
    <arguments>
        <argument name="strategiesList" xsi:type="array">
            <item name="view_preprocessed" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
            <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
/* ++ */    <item name="asset" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item>
        </argument>
    </arguments>
</virtualType>

यह मानकर कि आप डेवलपर मोड में हैं, केवल सामग्री हटाएं pub/staticऔर ब्राउज़र में अपने पृष्ठ पर जाएं - मैगेंटो स्थिर सामग्री को फिर से प्राप्त करेगा।

मेरे लिए Magento 2.1.4 में काम किया (शैलियों-m.cs उत्पन्न हुई और अन्य फ़ाइलों को सहानुभूति मिली)।

सभी जादू में होता है vendor/magento/framework/App/View/Asset/MaterializationStrategy/Factory.php:

public function create(Asset\LocalInterface $asset)
{   
    if (empty($this->strategiesList)) {
        $this->strategiesList[] = $this->objectManager->get(self::DEFAULT_STRATEGY);
    }   

    foreach ($this->strategiesList as $strategy) {
        if ($strategy->isSupported($asset)) {
            return $strategy;
        }   
    }   

    throw new \LogicException('No materialization strategy is supported');
}   

Magento सिर्फ stategiesListआइटम के माध्यम से लूप करता है और संपत्ति का समर्थन करने वाले पहले चरण का उपयोग करता है।

इसे उत्पादन मोड में कैसे काम करें?

डिस्क्लेमर: इस हैक में कोर फाइल एडिटिंग है। सावधान रहना।

सभी Magento 2.1.4 पर परीक्षण किया गया

  1. में स्थिर फ़ाइलों से संस्करण संख्या निकालें Stores > Configuration > Advanced > Developer > Static Files Settings > No
  2. संपादित करें vendor/magento/framework/App/StaticResource.phpऔर launchफ़ंक्शन इस तरह देखें:

    public function launch()
    {   
    // disabling profiling when retrieving static resource
    \Magento\Framework\Profiler::reset();
    $appMode = $this->state->getMode();
    /*if ($appMode == \Magento\Framework\App\State::MODE_PRODUCTION) {
        $this->response->setHttpResponseCode(404);
    } else {*/
        $path = $this->request->get('resource');
        $params = $this->parsePath($path);
        $this->state->setAreaCode($params['area']);
        $this->objectManager->configure($this->configLoader->load($params['area']));
        $file = $params['file'];
        unset($params['file']);
        $asset = $this->assetRepo->createAsset($file, $params);
        $this->response->setFilePath($asset->getSourceFile());
        $this->publisher->publish($asset);
    /*}*/
    return $this->response;
    }   
  3. किसी सामग्री को हटाएं pub/staticऔर किसी ब्राउज़र में अपने स्टोर url पर जाएं।


शुक्रिया यह पूरी तरह से काम किया! बस एक लाइन di.xml में! इसके अलावा, मैं आपके स्पष्टीकरण की सराहना करता हूं कि यह कैसे काम करता है। अब इंस्टॉल 770mb के बजाय 482mb है जो मेरे VPS फ्री ट्रायल सर्वर को अपग्रेड नहीं करने के लिए मुझे पैसे बचाएगा।
केविन चावेज़

आपका बहुत स्वागत है सर, मुझे खुशी है कि यह आपके लिए काम कर रहा है।
कॉन्स्टेंटिन गेरासिमोव

क्या यह केवल StaticResource.php को संशोधित करने के लिए पर्याप्त नहीं है और मूल एप्लिकेशन / etc / di.xml को जोड़े बिना रखें <item name="asset" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item> ?
लुकस्कू

0

जब उत्पादन मोड में नहीं होता है तो Magento 2 कुछ स्थैतिक संसाधनों के लिए सिम्बल बनाने की कोशिश करेगा। आप निम्न करके उस व्यवहार को बदल सकते हैं।

  1. एप्लिकेशन / etc / di.xml खोलें और virtualType नाम = "developerMaterialization" अनुभाग ढूंढें। उस अनुभाग में आपको एक आइटम नाम मिलेगा = "view_preprocessed" जिसे संशोधित या हटाए जाने की आवश्यकता है। आप Magento \ Framework \ App \ View \ Asset \ MaterializationStrategy \ Symlink से Magento के लिए सामग्री को बदलकर इसे संशोधित कर सकते हैं \ फ्रेमवर्क \ App \ View \ Asset \ MaterializationStrategy \ Copy

  2. पब / स्टेटिक के तहत फाइलें हटाएं। कृपया .htaccess फ़ाइल को न हटाएं।


1
मुझे नहीं लगता कि आपने मेरे प्रश्न को समझा है, मैं सीमित सर्वर संसाधनों के साथ अंतरिक्ष को बचाने के लिए "सिम्लिंक" करना चाहता हूं।
केविन शावेज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.