डिबगिंग एक कला का एक सा है, लेकिन कुछ है जो एक सरल आहार का पालन करके आसानी से महारत हासिल कर सकता है।
प्रत्येक बिंदु का पालन करें जब तक आप अंत में एक समाधान तक नहीं पहुंचते।
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
यदि यह आपके मुद्दे को हल करता है
फिर आपको थोड़ा गहरा खुदाई करने की आवश्यकता है कि टेम्पलेट का कौन सा भाग समस्याग्रस्त है। इसलिए अपने पैकेज को पुनर्स्थापित करें और प्रत्येक के बीच निम्नलिखित परीक्षण का प्रयास करें।
अनिवार्य रूप से, प्रक्रिया धीरे-धीरे निर्देशिकाओं को सक्षम करने के लिए है क्योंकि आप फ़ाइल ट्री को नीचे ले जाते हैं - जब तक कि आप आक्रामक फ़ाइल नहीं पा सकते हैं।
- लेआउट निर्देशिका का नाम बदलें
.tmp
- टेम्पलेट निर्देशिका का नाम बदलें
.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}
यदि समस्या या तो हल है
फिर यह समझने का मामला है कि किस मॉड्यूल में विशेष रूप से त्रुटि हुई है। पैकेज निदान के लिए ऊपर दिए गए उदाहरण के साथ, एक ही प्रक्रिया लागू होती है।
तो एक्स निर्देशिका को पुनर्स्थापित करें और प्रत्येक के बीच परीक्षण का प्रयास करें।
अनिवार्य रूप से, प्रक्रिया धीरे-धीरे निर्देशिकाओं (मॉड्यूल) को एक-एक करके सक्षम करने के लिए होती है जब तक कि त्रुटि फिर से न हो
- करने के लिए निर्देशिका में सभी मॉड्यूल का नाम बदलें
.tmp
(SSH उपयोगकर्ताओं के लिए ls | xargs -I {} mv {} {}.tmp
या rename 's/^/.tmp/' *
)
.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