मैगेंटो 2 सिम्बलिंक्स का उपयोग करके मॉड्यूल को जोड़ने की अनुमति नहीं देता है


10

मैंने प्रतीकात्मक लिंक का उपयोग करके Magento 2 के लिए एक स्थानीय विकास मॉड्यूल (अलग गिट रेपो) जोड़ा है और जब तक मैं PHTML टेम्पलेट्स को हिट नहीं करता तब तक यह ठीक काम कर रहा था। भारी डिबगिंग के बाद मुझे पता चला कि मैगेंटो 2 फाइलसिस्टम क्लास ( Magento\Framework\Filesystem\Directory\Read) फोन isExists()के साथ संयुक्त विधि का उपयोग करता है getAbsolutePath()यह देखने के लिए कि क्या PHTML मौजूद है। हालाँकि, getAbsolutePath()विधि जाँचती है कि क्या सापेक्ष पथ Magento 2 फाइल सिस्टम के भीतर मौजूद है और यदि नहीं, तो यह Magento 2 रूट को प्रस्तुत करता है। यह। मेरे मामले में, मॉड्यूल एक अलग रेपो /git/Aमें रहता है जबकि Magento में रहता है /site/Bऔर यह व्यवहार PHTML टेम्पलेट के अस्तित्व की जांच करता है /site/B/git/A

संक्षेप में: PHTML टेम्प्लेट जो Magento 2 रूट फाइल सिस्टम के बाहर रहते हैं, सिस्टम कॉन्फ़िगरेशन सेटिंग "सिम्कलिंक" चालू होने की परवाह किए बिना उठाए जाते हैं। ऐसा लगता है कि सेटिंग काम कर रही है, लेकिन केवल अगर सिंबल का स्रोत अभी भी Magento 2 फाइलसिस्टम के भीतर है।

क्या किसी और ने इसका सामना किया है? बाहरी गिट रेपो में विकास को संभालने का सबसे अच्छा तरीका क्या होगा?


50/50 बग / सुविधा। मैं कहता हूं कि एक मुद्दा दर्ज करें
12

@ चिह्न यह ज्ञात मुद्दा है जिसमें वर्कआर्ड है, मेरा उत्तर देखें
एलेक्स पालीरुश

जवाबों:


9

हैकिश वर्कअराउंड यदि आप अपने मॉड्यूल के लिए कंपोजर पाथ रिपॉजिटरी का उपयोग कर रहे हैं ।

में registration.phpडाल:

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Module_Name',
    isset($file) ? dirname($file) : __DIR__
);

यह आपके मॉड्यूल को उसके वास्तविक पथ के बजाय Magento के रूट विक्रेता dir में सिम्लिंकड पथ के तहत पंजीकृत करेगा।


1
इस समाधान ने मेरे लिए तब तक काम किया जब तक मैं मैगेंटो 2.3 में अपग्रेड नहीं हुआ (मुझे 'अमान्य टेम्पलेट फ़ाइल ...' त्रुटि मिल रही है)। किसी भी विचार यह कैसे हल करने के लिए?
Pini

नहीं, माफ करिए। क्या आप सुनिश्चित हैं कि जब आप सिमलिंक का उपयोग नहीं कर रहे हैं तो यह काम करता है? यदि ऐसा है तो आपको डीबग करना होगा कि M2.3 कैसे लोड हो रहा है। शायद एक और सवाल खुला?
fsw

यह सिमलिंक के बिना काम कर रहा है।
Pini

मैं विकास के दौरान वैग्रंट का उपयोग करता हूं। मैं सहम /vagrant/app/code/Vendor/जाता हूं /var/www/shop/app/code/Vendor। यह मेरे लिए हल हो गया!
BugHunterUK

मैं वापस आ गया हूं। यह समाधान काम नहीं करता है। जब मैंने अपने मॉड्यूल कोड को सिमिलिंक करने के लिए उपयोग किया था तो मेरे मॉड्यूल के लिए adminhtml रूट काम नहीं करेगा। मैंने सिम्लिंक को हटाकर और एप्लिकेशन / कोड निर्देशिका में फ़ाइलों को कॉपी करके इसकी पुष्टि की। तब प्लगइन ने काम किया। आप इस मॉड्यूल को बनाकर इसकी पुष्टि कर सकते हैं: devdocs.magento.com/guides/v2.3/ext-best-practices/… ... आपको वही समस्या मिलेगी जो मेरे पास थी।
बगहुंटरके

4

अपने देव रूट को इंगित करने के लिए पंजीकरण में हेरफेर करना भी संभव होना चाहिए।

यह सुनिश्चित करने के लिए कि यह लोड हो रहा है, आपको अपने बूटस्ट्रैप प्रक्रिया में कहीं न कहीं पंजीकरण को अंजाम देना होगा।

सबसे आसान तरीका (संगीतकार के माध्यम से इसे स्थापित किए बिना) इसे विक्रेता / संगीतकार / ऑटोलैड_फाइल्स .php से मैन्युअल रूप से जोड़ना होगा।

मैंने इसके लिए एक मॉड्यूल लिखने के बारे में भी सोचा। यह मॉड्यूल एकीकरण परीक्षण वातावरणों के लिए भी उपयोगी हो सकता है (कहीं न कहीं उन्हें कॉपी करने के बिना फ्लाई पर मॉड्यूल जोड़ने और हटाने के लिए)।

=== अद्यतन ===

अब तक मैंने मॉड्यूल लिखा था: http://github.com/davidverholen/magento2-dynamic-component-registry

यह भी मुझे लगता है कि सापेक्ष सिम्बलिंक का उपयोग करके मॉड्यूल को लिंक करना संभव होना चाहिए


3

स्टोर => कॉन्फ़िगरेशन => उन्नत => डेवलपर => टेम्प्लेट सेटिंग्स (मैगेंटो 1.x की तरह):

कॉन्फ़िगरेशन विकल्प

(यदि यह सेटिंग काम करती है तो मैंने परीक्षण नहीं किया है)

इसके अलावा, आप सबमॉड्यूल्स का उपयोग कर सकते हैं, इस तरह से आपको सिमलिंक की आवश्यकता नहीं है।

विकास के लिए, मैं एक अलग निर्देशिका में मॉड्यूल विकसित करता हूं और उन्हें Magento 2 की मेरी स्थापना में कॉपी करने के लिए PHPStorm का उपयोग करता हूं।


1
धन्यवाद। मेरे द्वारा बताई गई सेटिंग वास्तव में "टेम्पलेट सेटिंग्स" के तहत "अनुमति दें सिम्बलिंक" सेटिंग थी। यह Magento 1.x के तहत अच्छी तरह से काम करता है, लेकिन अब Magento 2 के तहत, फ़ाइलों को Magento रूट के भीतर होना चाहिए, इसलिए फाइलसिस्टम पर कहीं भी नहीं। वैसे भी, मैं ठीक हो
जाऊंगा

जीससे, बस एक विचार ... जब आप अपनी बिल्ड कलाकृतियों का निर्माण करते हैं, तो आप अलग-अलग मॉड्यूल को इकट्ठा करने के लिए संगीतकार का उपयोग कर सकते हैं, जो आपके द्वारा चलाए जा रहे कुछ मुद्दों से बचने के लिए जाता है, हालांकि यह आपके निर्माण की जटिलता को जोड़ सकता है। प्रक्रिया। AFAIK, यह स्थिति को संभालने के लिए Magento का अनुशंसित तरीका है।
ब्रायन 'बीजे' हॉफपाउर जूनियर

धन्यवाद, PHPStorm विकल्पों ने पहले ही इसे मेरे लिए हल कर दिया था, लेकिन जैसा कि @ एलेक्स-पलीउरुश ने बताया, कुछ परिदृश्य ऐसे हैं, जहां वर्कअराउंड केवल काम नहीं करता है। मैं इसके बजाय एक पीआर जोड़ूंगा।
जिस्से रीत्समा

धन्यवाद ब्रायन आपके सुझाव के लिए भी। हालांकि, संगीतकार उत्पादन साइटों से निपटने के दौरान एकदम सही है, लेकिन मैं कस्टम मॉड्यूल विकसित करने के लिए बेहतर तरीके की तलाश कर रहा था। संगीतकार को अभी तक नाटक में नहीं होना चाहिए, क्योंकि यह कोड को वितरित करने का तरीका है जिसे मुझे पहले Magento 2 के भीतर विकसित करने की आवश्यकता है, इसलिए संगीतकार हमेशा विभिन्न कमिट्स के पीछे होता है। यह कहा जा रहा है, PhpStorm (और अन्य IDEs) पहले से ही इसके लिए एक समाधान प्रदान करते हैं। तो एकमात्र मुद्दा यह है कि उत्पादन साइट इस सिम्लिंक सीमा से ग्रस्त हैं, और फिर आपके तर्क में लात मार
दी जाती है

3

यदि आप PHP स्टॉर्म का उपयोग कर विकसित करते हैं, तो बस दूसरी रिपोजिटरी को Magento प्रोजेक्ट रूट पर कॉपी करें। फिर मॉड्यूल को सक्षम करने के लिए आवश्यक सीमलिंक बनाएं। PHP स्टॉर्म इस प्रोजेक्ट को मल्टीरोटेड के रूप में मानेगा और दोनों रिपॉजिटरी को मान्यता देगा। आप तुल्यकालिक और अतुल्यकालिक (डिफ़ॉल्ट) भंडार प्रबंधन रणनीतियों के बीच चयन कर सकते हैं ।

यह समस्या तब भी होती है जब ईई (या कोई अन्य मॉड्यूल) सीमल से सीलिंक का उपयोग करके जुड़ा हुआ है। मूल कारण यह है कि registration.phpनिर्देशिका के लिए वास्तविक पथ के रूप में आधार मॉड्यूल पथ की गणना करता है (आपके मामले में यह Magento परियोजना के बाहर है)। इसीलिए सापेक्ष पथ की गणना गलत तरीके से की जाती है, और फिर पूर्ण पथ भी गलत होता है। यदि दूसरी रिपॉजिटरी को Magento रूट के अंतर्गत रखा जाता है, तो सापेक्ष पथ वास्तविक फ़ाइल पथ (सिम्कलिन नहीं) को इंगित करेगा, लेकिन यह अभी भी पाया जाएगा, इसलिए सब कुछ काम करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.