एक Magento दुकान डिबगिंग के लिए बुनियादी बातों


81

मैं अपने Magento स्टोर को कैसे डीबग कर सकता हूं

यह एक ऐसा प्रश्न है जो अब हमारे लिए बिल्कुल भी प्रासंगिक नहीं है, लेकिन 5 साल पहले एक Magento SE साइट मौजूद थी, यह शायद हमारा पहला सवाल होगा। उन लोगों के लिए जो केवल Magento में जा रहे हैं, या इसके साथ अपरिचित हैं - डिबगिंग के मूल सिद्धांतों को जानना मुद्दों के कारण को नियंत्रित करने के लिए महत्वपूर्ण हो सकता है। और इसके बावजूद हमारे लिए अप्रासंगिक होने के बावजूद, हम इस सवाल का पूर्व-उत्तर दे रहे हैं, जो एक स्व-उत्तरित दृष्टिकोण के साथ दिखाई दे रहा है।

मेरी साइट नीचे है मदद करो!

  1. क्या मेरा डिजाइन गलती पर है?
  2. क्या गलती पर एक 3 पार्टी मॉड्यूल है?
  3. मुझे त्रुटि क्यों नहीं दिखाई दे रही है?

इन प्रश्नों में से प्रत्येक को डीबग करने के लिए एक मानकीकृत दृष्टिकोण का पालन करके आसानी से उत्तर दिया जा सकता है जो कि उपयोगकर्ताओं के सबसे मूल को भी पूरा कर सकता है। एक Magento स्टोर डिबगिंग की बुनियादी बातों के उन्मूलन की एक प्रक्रिया के माध्यम से।


5
एक अच्छे डिबगर और अपनी बुद्धिमत्ता का उपयोग करें ...
सिल्वेन रेय

4
क्या यह एक गंभीर प्रश्न है?
davidalger

5
नहीं, इसका एक जानबूझकर स्वयं ने इस बीटा पर गेंद को रोल करने में मदद करने के लिए सवाल का जवाब दिया। स्टैक एक्सचेंज न केवल स्व-उत्तर वाले प्रश्नों की अनुमति देता है, बल्कि सक्रिय रूप से इसे प्रोत्साहित करता है । blog.stackoverflow.com/2012/05/encyclopedia-stack-exchange । @sylvain यह सवाल नए / अनुभवहीन उपयोगकर्ताओं की ओर है कि डिबगिंग प्रक्रिया शुरू करने में मदद करने के लिए
बेन लेसानी - सोनासी

@sonassi मैंने निराश नहीं किया और आपने अपने प्रश्न को स्पष्ट तरीके से दर्शाया। संभवतः मैं इसके लिए मदद कर सकता था :) मुझे नहीं पता था कि एसई केवल एक प्रश्नोत्तर नहीं है, यह जानना अच्छा है। मुख्य विषय के बारे में, यहां उत्तर संभव सबसे गहरी समस्याओं की सतह है, इसलिए मैं कहता हूं कि डिबगर का उपयोग करें और पहले समझें कि मैगेंटो की आंतरिक प्रेषण प्रक्रिया कैसे काम करती है, आप इसे समझने के बाद बहुत सारी समस्याओं को हल कर सकते हैं। वह मेरा 5 सेंट है। कर की गणना, शिपिंग के तरीकों, ब्लॉक जेनरेशन या किसी अन्य समस्या का समाधान कैसे करें: डीबगिंग! यह इंटर्न प्रक्रिया को सीखने में भी मदद करता है।
सिल्वेन रे फे

2
समझ लिया। मैं जो मदद करने की कोशिश कर रहा था वह अधिक मौलिक घातक त्रुटियाँ हैं। स्पष्ट रूप से समस्याओं का दायरा जवाब देने के लिए एकल समाधान के लिए बहुत व्यापक है। क्वर्क्स / छोटे बग का निदान डिबगिंग के माध्यम से किया जाता है - लेकिन घातक त्रुटियों के लिए - नीचे के अनुसार एक कम नाजुक दृष्टिकोण की आवश्यकता होती है। और हां, मैंने सवाल को
टाल दिया

जवाबों:


98

डिबगिंग एक कला का एक सा है, लेकिन कुछ है जो एक सरल आहार का पालन करके आसानी से महारत हासिल कर सकता है।

प्रत्येक बिंदु का पालन करें जब तक आप अंत में एक समाधान तक नहीं पहुंचते।


PHP त्रुटियों को सक्षम करें

यह अधिकांश मुद्दों की कुंजी है। सुरक्षा या अन्य कारणों से, PHP त्रुटि प्रदर्शन आपके PHP कॉन्फ़िगरेशन द्वारा डिफ़ॉल्ट रूप से अक्षम किया जा सकता है।

आप त्रुटियों को अधिक स्थायी समाधान या केवल कुछ और अस्थायी के साथ सक्षम कर सकते हैं।

स्थायी समाधान

Apache / mod_php उपयोगकर्ताओं के लिए

अपने दस्तावेज़ रूट की .htaccessफ़ाइल में - बस इसे सबसे ऊपर छोड़ दें।

php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag  log_errors on
php_value error_log  /home/path/public_html/var/log/system.log

Nginx / FastCGI उपयोगकर्ताओं के लिए

आपके Nginx virtualhost कॉन्फ़िगरेशन में, अंतिम location .php {निर्देशन में, या fastcgi_paramsफ़ाइल में (यदि आपके पास कोई निर्दिष्ट है)

fastcgi_param PHP_VALUE  display_startup_errors=on;
fastcgi_param PHP_VALUE  display_errors=on;
fastcgi_param PHP_VALUE  html_errors=on;
fastcgi_param PHP_VALUE  log_errors=on;
fastcgi_param PHP_VALUE  error_log=/home/path/public_html/var/log/system.log;

अस्थायी / सार्वभौमिक समाधान

किसी भी मंच के लिए

index.phpअपने दस्तावेज़ रूट में Magento बूटस्ट्रैप संपादित करें और निम्नलिखित पंक्ति को अनइंस्टॉल करें:

#ini_set('display_errors', 1);

डेवलपर मोड सक्षम करें

जब आपको कोई त्रुटि हुई हो और अचानक "त्रुटि रिपोर्ट" पृष्ठ पर हिट किया गया हो, और ऐसा प्रतीत होता है कि बेकार त्रुटि स्ट्रिंग दी गई है 1184257287824- तो आपको कुछ विकल्प मिलेंगे।

स्थायी समाधान

Apache / mod_php उपयोगकर्ताओं के लिए

अपने दस्तावेज़ रूट .htaccessफ़ाइल में - बस इसे सबसे ऊपर छोड़ दें।

SetEnv MAGE_IS_DEVELOPER_MODE true

Nginx / fastcgi उपयोगकर्ताओं के लिए

आपके Nginx virtualhost कॉन्फ़िगरेशन में, अंतिम location .php {निर्देशन में, या fastcgi_paramsफ़ाइल में (यदि आपके पास कोई निर्दिष्ट है)

fastcgi_param MAGE_IS_DEVELOPER_MODE true;

अस्थायी / सार्वभौमिक समाधान

index.phpअपने दस्तावेज़ रूट में Magento बूटस्ट्रैप को संपादित करें और या तो ifकथन को हमेशा सही बनाएं , या अपने विशिष्ट आईपी के लिए सक्षम करें।

if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE']) || true) {
  Mage::setIsDeveloperMode(true);
}

या

if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE']) || $_SERVER['REMOTE_ADDR'] == 'my.ip.add.ress') {
  Mage::setIsDeveloperMode(true);
}

अपनी अनुमतियां जांचें

गलत अनुमतियाँ समस्याओं का खजाना पैदा करेंगी, जिनमें से बहुत सारी चीजें पहली नज़र में आसान नहीं हैं।

उदाहरण के लिए।
यदि PHP ./mediaनिर्देशिका में नहीं लिख सकता है और आपके पास जेएस संयोजन सक्षम है - तो मीडिया के लिए संयुक्त फाइल और संबंधित यूआरआई से मैगनेटो उत्पन्न करने में असमर्थ है। इसलिए इसके बजाय, आपको अपने ब्राउज़र स्रोत कोड में जो मिलेगा वह मीडिया फ़ाइल का एक पूर्ण सर्वर पथ है /home/path/public_html/media/xxx

अन्यथा, साइट सामान्य रूप से कार्य कर सकती है - वास्तव में दिखाई देने वाली कोई महत्वपूर्ण त्रुटि नहीं है।

कृपया ध्यान रखें, यह अभ्यास समर्पित होस्टिंग के लिए सुरक्षित है, लेकिन यदि Apache प्रक्रिया प्रति उपयोगकर्ता chroot'n नहीं है तो साझा होस्टिंग के साथ सुरक्षा समस्याएँ प्रस्तुत कर सकता है।

हमारे उदाहरण में, SSH / FTP उपयोगकर्ता है sonassi, Apache उपयोगकर्ता है apacheऔर समूह हैapache

Apache ग्रुप में FTP / SSH यूजर को जोड़ें

सबसे महत्वपूर्ण बात, हमें यह सुनिश्चित करने की ज़रूरत है कि एफ़टीपी / एसएसएच उपयोगकर्ता अपाचे समूह का हिस्सा है, हमारे उदाहरण में, इसका apache(लेकिन आमतौर पर भी www-data)

usermod -a -G apache sonassi

FTP / SSH के लिए आपके पास जितने समूह हैं उतने उपयोगकर्ता जोड़े रखें।

मूल अनुमतियाँ रीसेट करें

इसलिए हम शुरू करने से पहले, सुनिश्चित करें कि सभी अनुमतियाँ सही हैं।

chown -R sonassi:apache /home/path/public_html/
find /home/path/public_html/ -type d -exec chmod 775 {} \;
find /home/path/public_html/ -type f -exec chmod 664 {} \;

बदलावों को स्थायी बनाना

ACLs और स्टिकी बिट्स

लिनक्स में ACLs हमें विशिष्ट नियमों को परिभाषित करने की अनुमति देते हैं, हमारे मामले में, सृजन के लिए कौन-सी अनुमतियाँ फ़ाइलें चाहिए। एक चिपचिपा बिट (बाद में उल्लिखित) समूह की विरासत का ख्याल रखता है, लेकिन अनुमतियों के साथ मदद नहीं करता है, यही कारण है कि हम एसीएल का उपयोग करते हैं।

सक्रिय विभाजन पर एसीएल समर्थन को सक्षम करने से शुरू करें, कृपया सुनिश्चित करें कि आपका कर्नेल एसीएल समर्थन के साथ संकलित किया गया था

आपका विभाजन हो सकता है /, /home, /varया कुछ और, के रूप में उपयुक्त बदलें।

mount -o remount,acl /home

अब ACL सक्षम हैं, हम ACL नियम और समूह चिपचिपा बिट्स सेट कर सकते हैं:

setfacl -d -m u::rwx,g::rwx,o::rx /home/path/public_html/
chmod g+s /home/path/public_html/

लेकिन मेरे पास ACL का समर्थन नहीं है

यदि आपका कर्नेल ACLs का समर्थन नहीं करता है, तो आप umaskडिफ़ॉल्ट फ़ाइल अनुमतियों को सेट करने के लिए (जो BASH, FTP और PHP के लिए एक रन समय सेटिंग है) भी उपयोग कर सकते हैं । मैगेंटो आमतौर पर सेट करता umask(0)है index.php, हालांकि, इसे बदलना आपके हित में होगा।

अपने index.phpपरिवर्तन में होने वाली umaskरेखा

umask(022);

और SSH के लिए आपके BASH वातावरण में, इसे अपने .bashrcया में सेट करें.bash_profile

umask 022

अपने एफ़टीपी सर्वर के लिए, आपको इसके लिए प्रलेखन पढ़ने की आवश्यकता होगी, लेकिन सिद्धांत एक ही है।


थीम को डिफ़ॉल्ट पर वापस लाएं

यह संभव है कि इस विषय के लिए आपका विषय या पैकेज जिम्मेदार हो। वेनिला मैगेंटो थीम पर वापस लौटना एक त्वरित तरीका है।

** यह चेतावनी के साथ आता है कि कुछ मॉड्यूल कुछ विषय सुविधाओं पर निर्भर हो सकते हैं *

व्यवस्थापक पैनल के माध्यम से कुछ भी बदलने के बजाय, केवल अपमानजनक निर्देशिकाओं का नाम बदलना बहुत सरल है।

के माध्यम से एस.एस.एच.

mv ./app/design/frontend/myBrokenTheme{,.tmp}
mv ./skin/frontend/myBrokenTheme{,.tmp}

या अपने एफ़टीपी क्लाइंट के माध्यम से, अपने पैकेज का नाम बदलकर किसी और चीज़ में बदल दें। जैसे।myBrokenTheme.tmp

यदि यह आपके मुद्दे को हल करता है

फिर आपको थोड़ा गहरा खुदाई करने की आवश्यकता है कि टेम्पलेट का कौन सा भाग समस्याग्रस्त है। इसलिए अपने पैकेज को पुनर्स्थापित करें और प्रत्येक के बीच निम्नलिखित परीक्षण का प्रयास करें।

अनिवार्य रूप से, प्रक्रिया धीरे-धीरे निर्देशिकाओं को सक्षम करने के लिए है क्योंकि आप फ़ाइल ट्री को नीचे ले जाते हैं - जब तक कि आप आक्रामक फ़ाइल नहीं पा सकते हैं।

  1. लेआउट निर्देशिका का नाम बदलें .tmp
  2. टेम्पलेट निर्देशिका का नाम बदलें .tmp

फिर अगर या तो एक पैदावार मिलती है, तो लेआउट निर्देशिका के भीतर सभी फ़ाइलों का नाम बदलें .tmp- (एसएसएच उपयोगकर्ताओं के लिए ) ls | xargs -I {} mv {} {}.tmpयाrename 's/^/.tmp/' *

फिर धीरे-धीरे प्रत्येक फाइल को 1 तक 1 हल करें।

यदि यह आपकी समस्या का समाधान नहीं करता है

ऐसी संभावना है कि आपके base/defaultया enterprise/defaultनिर्देशिका दूषित हो गए हैं - और एक ज्ञात स्वच्छ संस्करण के साथ सबसे अच्छे स्थान पर हैं।

आप Magento के एक स्वच्छ बिल्ड को डाउनलोड करके और अपनी निर्देशिकाओं को आवश्यक रूप से बदलकर ऐसा कर सकते हैं। SSH के माध्यम से आप यह कर सकते हैं:

cd /home/path/public_html/
mkdir clean_mage
cd clean_mage
MAGENTO_VERSION=1.7.0.0
wget -O magento.tgz  http://www.magentocommerce.com/downloads/assets/$MAGENTO_VERSION/magento-$MAGENTO_VERSION.tar.gz
tar xvfz magento.tgz
cd /home/path/public_html/app/design/frontend
mv base{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/app/design/frontend/base .
cd /home/path/public_html/skin/frontend
mv base{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/skin/frontend/base .

diffयदि आप किसी परिवर्तन को सत्यापित करना चाहते हैं, तो आप दो निर्देशिकाओं के लिए अवसर भी ले सकते हैं ।

diff -r base base.tmp

एनबी। यह विधि प्रक्रिया के दौरान अधिक त्रुटियों का कारण बनेगी, क्योंकि मॉड्यूल निर्भरता विशिष्ट फ़ाइलों के अस्तित्व को निर्धारित करती है। दुर्भाग्य से, पाठ्यक्रम के लिए अपने बराबर है।


स्थानीय मॉड्यूल अक्षम करें

डिफ़ॉल्ट रूप से, Magento परिभाषित करता है PHP में निम्न क्रम में कक्षाएं लोड करने का मार्ग शामिल है

Local > Community > Core

यदि कोई फ़ाइल लोकल में है - इसे लोड करें और अधिक न करें।
यदि कोई फ़ाइल समुदाय में है - इसे लोड करें और अधिक न करें।
यदि कोई फ़ाइल कहीं और नहीं मिल सकती है - तो इसे कोर से लोड करें।

फिर से, Magento के व्यवस्थापक पैनल के माध्यम से अक्षम मॉड्यूल के बजाय, यह एक फ़ाइल स्तर पर ऐसा करने के लिए अधिक व्यावहारिक है।

आमतौर पर, एक मॉड्यूल को "उचित" तरीके से अक्षम करने के लिए, आप संबंधित ./app/etc/modules/MyModule.xmlफ़ाइल को संपादित करेंगे और सेट करेंगे <active>false</active>- हालांकि, यह वास्तव में एक वर्ग को लोड होने से नहीं रोकता है।

यदि कोई अन्य वर्ग किसी दिए गए वर्ग को एक मॉड्यूल में बढ़ाता है (किसी भी Magento निर्भरता की घोषणा को अनदेखा करता है), तो यह अभी भी लोड किया जाएगा - चाहे वह एक्सटेंशन अक्षम हो या न हो।

तो फिर, एक एक्सटेंशन को निष्क्रिय करने का सबसे अच्छा साधन निर्देशिका का नाम बदलना है।

स्थानीय को अक्षम करके शुरू करें

बस FTP के माध्यम से निर्देशिका का नाम बदलें, या निम्न SSH कमांड का उपयोग करें

mv ./app/code/local{,.tmp}

फिर समुदाय को अक्षम करें

mv ./app/code/community{,.tmp}

यदि समस्या या तो हल है

फिर यह समझने का मामला है कि किस मॉड्यूल में विशेष रूप से त्रुटि हुई है। पैकेज निदान के लिए ऊपर दिए गए उदाहरण के साथ, एक ही प्रक्रिया लागू होती है।

तो एक्स निर्देशिका को पुनर्स्थापित करें और प्रत्येक के बीच परीक्षण का प्रयास करें।

अनिवार्य रूप से, प्रक्रिया धीरे-धीरे निर्देशिकाओं (मॉड्यूल) को एक-एक करके सक्षम करने के लिए होती है जब तक कि त्रुटि फिर से न हो

  1. करने के लिए निर्देशिका में सभी मॉड्यूल का नाम बदलें .tmp(SSH उपयोगकर्ताओं के लिए ls | xargs -I {} mv {} {}.tmpया rename 's/^/.tmp/' *)
  2. .tmpफ़ाइल नाम से हटाकर धीरे-धीरे प्रत्येक मॉड्यूल को एक-एक करके सक्षम करें

अगर मसला हल नहीं हुआ

फिर यह संभव है कि कोर स्वयं दूषित है। मुख्य Magento के PHP कोर के होते हैं

./app/code/core
./lib

तो फिर से, इन निर्देशिकाओं का नाम बदलें और एक साफ प्रकार में कॉपी करें। मान लें कि आपने पहले से ही Magento का एक स्वच्छ संस्करण डाउनलोड किया है, SSH के माध्यम से, आप यह कर सकते हैं:

cd /home/path/public_html/app/code
mv core{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/app/code/core .

तब यदि समस्या अभी भी हल नहीं हुई है, तो libनिर्देशिका को भी बदलें

cd /home/path/public_html
mv lib{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/lib .

इस बिंदु पर, आपका Magento स्टोर एक संशोधित डेटाबेस के साथ वेनिला इंस्टॉलेशन से अधिक कुछ नहीं होगा।

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


उपरोक्त मार्गदर्शिका आपको एक त्रुटि की पहचान करने के लिए आपके रास्ते पर लाने के लिए कार्य करती है; परिणामी त्रुटि को ठीक करने के लिए नहीं।

सामग्री स्वेच्छा से प्राप्त www.sonassi.com/knowledge-base/magento-debug-process और www.sonassi.com/knowledge-base/stop-magento-permissions-errors-permanently


7
मुझे लगता है कि उत्तर कुछ Magento उपयोगकर्ताओं के लिए उपयोगी हो सकता है, लेकिन इसे एक समुदाय-विकी जैसे प्रश्नोत्तर के रूप में चिह्नित किया जाना चाहिए क्योंकि पोस्टर ने तुरंत प्रश्न का उत्तर दिया।
मथायस ज़ीस

8
स्व उत्तरित प्रश्नों को न केवल अनुमति दी जाती है, बल्कि एसई द्वारा प्रोत्साहित किया जाता है। blog.stackoverflow.com/2012/05/encyclopedia-stack-exchange । अधिक उपयोगकर्ताओं को इस बीटा को विकसित करने में मदद करने के लिए होना चाहिए, अन्य सदस्यों को दूसरों की मदद करने और साइट को आगे बढ़ाने के लिए प्रयास करने के लिए नहीं?
बेन लेसानी - सोनासी

यह नहीं होना चाहिए 755और 644अनुमतियाँ? या आपके पास सिफारिश करने के लिए कोई विशेष कारण है 775और 664?
जर्गेन थेलेन

@Jurgen - सभी के लिए हमारे सर्वर - Nginx / अपाचे / पीएचपी हमेशा SSH / FTP रूप में एक ही उपयोगकर्ता के रूप में चलाता है - साझा / समर्पित होस्टिंग पर यह हो। इसलिए अनुमति rwxकेवल स्वामी के लिए हो सकती है - समूह के रूप में और बाकी सभी प्रासंगिक नहीं हैं। लेकिन जैसा कि मैंने उल्लेख किया है - हर कोई अपने सर्वर को ठीक से कॉन्फ़िगर नहीं करता है (वास्तव में, बहुत, बहुत कम) - और इसमें Apache / Nginx / PHP उपयोगकर्ता के लिए SSH / FTP उपयोगकर्ता से भिन्न होने की संभावना है - इसलिए एक दूसरे को जोड़ने के लिए प्रत्येक संबंधित समूह तब प्रत्येक rwxफाइल के लिए अनुमति देता है जैसा कि उन्हें होना चाहिए।
बेन लेसानी - सोनासी

यदि आप टर्मिनल का उपयोग करके दो निर्देशिकाओं को अलग नहीं करना चाहते हैं, तो आप इन GUI विकल्पों में से एक को स्थापित कर सकते हैं: askubuntu.com/questions/12473/…
pablofiumara

18

जैसा कि ट्विटर पर अनुरोध किया गया है और मेटा पर चर्चा की गई है, मैं यहां गैर-देवों के लिए एक डीबगिंग ट्यूटोरियल शुरू करूंगा।

पहले मुझे लगता है (यहां तक ​​कि आप Magento यह संलग्न करने की कोशिश करता है) Magento डेवलपर / विकास टीम के बिना एक व्यापारी के लिए बहुत जटिल है। लेकिन अगर आप बहादुर हैं और इसे आज़माना चाहते हैं, तो हम आपकी मदद के लिए अपना सर्वश्रेष्ठ दे रहे हैं। मुझे लगता है कि कुछ सवालों के लिए सीमा है "मैं यह कैसे कर सकता हूं?" और "कृपया अपना काम करें, मैं Google के लिए बहुत बेवकूफ हूं" यह एक बहुत ही अच्छी लाइन है। मैं समझता हूं कि यह अक्सर कठिन होता है, Google को लगता है कि क्योंकि आप नहीं जानते कि आप किस लिए जा रहे हैं, क्योंकि आप अभी तक नामकरण नहीं जानते हैं। यह कहा, चलो एक Magento स्टोर के साथ हर किसी को इकट्ठा कर सकते हैं, यहां तक ​​कि आप (ओं) वह कोई डेवलपर्स है।

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

डिस्क्लेमर: इस पोस्ट में उल्लिखित सभी डाइरेक्टरी और फाइलें मैगेंटो रूट फोल्डर के सापेक्ष हैं, जो कि हो सकता है, /var/wwwलेकिन होस्टिंग प्रोवाइडर के आधार पर, आपकी तथाकथित डॉक्यूमेंट रुट हर जगह हो सकती है, अपने प्रोवाइडर से पूछें, अगर आपको अपना मैगेंटो नहीं मिला !

विकास मोड

आप वास्तविक त्रुटियां चाहते हैं, न कि भद्दा "एक त्रुटि हुई" पृष्ठ जो मैगनेटो सामान्य रूप से वितरित करता है। http://www.fontis.com.au/blog/magento/custom-magento-error-page

इस छवि के लिए fontis.com को धन्यवाद ।

पृष्ठ पर उल्लिखित रिपोर्ट में पाया जा सकता है var/reports/<the_number>

जब आप विकास मोड को सक्रिय करते हैं, तो मैगेंटो वास्तविक त्रुटि उठाता है, ये त्रुटियां विशेष रूप से क्रेडेंशियल्स को लीक कर सकती हैं, जैसे डेटाबेस के लिए! इसलिए, उत्पादन सर्वर को चालू करने से पहले सोचें!

index.phpMagento के रूट फ़ोल्डर में अपनी फ़ाइल खोलें , संस्करण के आधार पर, आप इन पंक्तियों को लाइन 73 के आसपास पाते हैं:

if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) {
    Mage::setIsDeveloperMode(true);
}

#ini_set('display_errors', 1);

अब मोड को सक्रिय करने के लिए, आपको इन लाइनों को बदलना होगा।

यदि आप अपना आईपी पता जानते हैं (ज्यादातर लोगों को हर 24 घंटे में एक नया मिलता है, तो कम से कम जर्मनी में), Google आपकी यहां मदद करता है:

आपका सार्वजनिक IP पता 87.138.100.68 है

if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE']) 
    || $_SERVER['REMOTE_ADDR'] == 'my.ip.add.ress'
) {
    Mage::setIsDeveloperMode(true);
    ini_set('display_errors', 1);
}

यदि आप अपने आईपी को किसी भी कारण से नहीं जानते हैं, तो आप सभी के लिए त्रुटियां दिखा सकते हैं।

#if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE']) || true) {
  Mage::setIsDeveloperMode(true);
#}
ini_set('display_errors', 1);

लॉगिंग

Magento दो फ़ाइलों में बहुत सारा सामान लेती है:

  • var/log/exception.log
  • var/log/system.log

अपवाद हमेशा लॉग होते हैं। सिस्टम लॉग को बैकएंड में सक्षम करने की आवश्यकता है:

System > Configuration > Developer > Log

यहाँ छवि विवरण दर्ज करें

Enabledहां पर सेट करें और आप में और अधिक त्रुटियों और डीबग संदेशों को देखें system.logऔर इन करेंexception.log

यह एक विषय समस्या है?

आपकी अपनी थीम है, इसे यहां बैकएंड में कॉन्फ़िगर किया गया है:

सिस्टम> कॉन्फ़िगरेशन> डिज़ाइन

यहाँ छवि विवरण दर्ज करें

छवि के लिए kb.magenting.com के लिए धन्यवाद

यहां आप पैकेज और थीम को कॉन्फ़िगर कर सकते हैं। यदि आप डिफ़ॉल्ट थीम में त्रुटि को पुन: उत्पन्न करने का प्रयास करना चाहते हैं, तो इनपुट फ़ील्ड से सब कुछ हटा दें। फिर सहेजें पर क्लिक करें और आप डेमो शॉप की तरह मानक मैगेंटो थीम देखें , यदि आपके पास 1.8 से पहले की दुकान है तो आप मैग्नेटो कम्युनिटी एडिशन यूजर गाइड में स्क्रीन-शॉट पा सकते हैं।

यदि आप डिफ़ॉल्ट थीम में समस्या को पुन: उत्पन्न नहीं कर सकते हैं, तो आपका विषय टूट गया है, कृपया विषय विक्रेता से संपर्क करें। हम तीसरे पक्ष के विषयों, विशेष रूप से वाणिज्यिक लोगों के लिए समर्थन नहीं देते हैं।

अब क्या?

आपको एक वास्तविक त्रुटि मिली, एक पुन: पेश कर सकता है, यह डिफ़ॉल्ट विषय में प्रतिलिपि प्रस्तुत करने योग्य है? महान, कृपया एक प्रश्न खोलें, और हम मदद करने के लिए अपना सर्वश्रेष्ठ दे रहे हैं।

प्रश्न में:

  • वर्णन करें कि आप क्या कर रहे हैं
  • क्या त्रुटि है
  • लॉग फ़ाइलों में कुछ भी है?
  • शायद त्रुटि का एक स्क्रीन-शॉट

5
  1. सबसे पहले आपको डेवलपर मोड को सक्षम करना चाहिए
  2. आप index.php: ini_set ('display_errors', 1) में त्रुटियों को प्रदर्शित करने में सक्षम हो सकते हैं;
  3. किसी भी स्मार्ट आईडीई (PhpStrom / ग्रहण) के साथ xDebug एक्सटेंशन संकलित करें
  4. कस्टम और तीसरे पक्ष के मॉड्यूल को अक्षम करें
  5. अपने अपवाद और त्रुटि लॉग की समीक्षा करें, अपवाद लॉग पर सूचीबद्ध त्रुटियों को हल करें
  6. कर्ल और mcrypt एक्सटेंशन को अपने सर्वर पर लोड किया जाना चाहिए
  7. फ़ोल्डर की जाँच करें और फ़ाइलें अनुमतियाँ chown -R sonassi: apache / home / path / public_html / find / home / path / public_html / -type d -exec chmod 775 {} \; find / home / path / public_html / -type f -exec chmod 664 {} \;
  8. यदि सेट नहीं है, तो मीडिया और var निर्देशिका अनुमति 0777 को अपडेट करें
  9. IDE (phpstrom) प्रारंभ करें, फिर डीबगर प्रारंभ बिंदुओं को index.php 10.Press F8 पर सेट करें और तब तक आगे बढ़ें जब तक कि त्रुटि न हो जाए

उपरोक्त चरणों का उपयोग करने के लिए आपको निश्चित रूप से त्रुटियां मिलनी चाहिए।


1
मैं आपके जवाबों की सराहना करता हूं, लेकिन सवाल का जवाब देने के बजाय जो पहले ही जवाब स्वीकार कर चुके हैं, आप इस सवालों का
dh47

3
@ dh47 मेरे लिए, अभिषेक ने जो किया वह सही है। मैं केवल इस बात का उल्लेख करना चाहता हूं कि पहले से स्वीकृत प्रश्नों का उत्तर देना अभी भी प्रासंगिक और महत्वपूर्ण है। वास्तव में हमारी साइट (Magento SE) में इस महत्वपूर्ण पहलू का अभाव है। बीटा से बाहर आने के लिए 2.5 उत्तर राशन होना जरूरी है। वर्तमान में हमारे पास केवल 1.6 उत्तर अनुपात है। एक ही प्रश्न पर कई उत्तरों की सराहना की जानी चाहिए। उस प्रश्न के उत्तर के बिना एक प्रश्न न छोड़ें, उस प्रश्न का एक स्वीकृत उत्तर है। यदि आपके पास अतिरिक्त जोड़ने के लिए एक और बिंदु है, तो आपको जवाब देना चाहिए।
राजीव के टॉमी

-1

डिबग बैकट्रेस

यह Magento में फ़ंक्शन कॉल को डीबग करने के लिए अच्छा फ़ंक्शन है।

इस फ़ंक्शन को शामिल / config.php में जोड़ें या नई फ़ाइल बनाएं और अपने सभी सामान्य उपयोग किए गए php फ़ंक्शन डालें।

समारोह back_trace ($ निकास = सच) {
  $ call_back_methods = '';
  $ call_back_methods। = '';
  $ call_back_methods। = 'SNFunction NameLine NumberFile नाम';

  $ काउंटर = 1;
  foreach (debug_backtrace () $ index => $ data के रूप में) {
    // अगर (0 == $ सूचकांक) जारी है;

    $ call_back_methods। = ''। $ काउंटर ++। '';
    $ call_back_methods। = ''। $ डेटा ['फ़ंक्शन']। '';
    $ call_back_methods। = ''। $ डेटा ['लाइन']। '';
    $ call_back_methods। = ''। $ डेटा ['फ़ाइल']। '';
  }

  $ call_back_methods। = '';

  $ call_back_methods प्रिंट करें;

  अगर (सच == $ बाहर) बाहर निकलें;
}

आउटपूट होगा

यहाँ छवि विवरण दर्ज करें

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