नए एक्सटेंशन इंस्टॉलेशन पर 404 त्रुटि से कैसे बचें


27

यह एक बहुत ही सामान्य त्रुटि है जो मैगेंटो में दिखाता है जब आप system.xml config के साथ एक नया एक्सटेंशन स्थापित करते हैं :

जब आप System->Configuration->Extensionटैब पर जाते हैं, तो 404 त्रुटि दिखाई जाती है। आपको लॉगआउट करने और फिर से लॉगिन करने की आवश्यकता है और फिर यह ठीक है। लेकिन क्या इससे बचने का कोई उपाय है?


जब आप लॉग इन करते हैं और उपयोगकर्ताओं के सत्र में संग्रहीत किए जाते हैं, तो मुझे विश्वास नहीं होता कि ACL का पेड़ भरा हुआ है।
पीटर ओ'कालाघन

मेरे पास एक विचार है लेकिन मुझे नहीं पता कि क्या यह संभव है। एक्सटेंशन स्थापित होने के बाद सभी व्यवस्थापक सत्रों को समाप्त करने के लिए आप "Magento कनेक्ट मैनेज" का व्यवहार बदल सकते हैं। लेकिन इसका विस्तार के दायरे से करना संभव नहीं है (और (केवल कनेक्ट मैनेजर के दायरे से।
oleksii.svarychevskyi

2
आपके सवाल ने मेरे सवाल का जवाब दिया! धन्यवाद!
इयान फिलिप्स

मुझे एक टिप्पणी छोड़नी पड़ी, क्योंकि जैसा कि इयान ने कहा: "आपके प्रश्न ने मेरे प्रश्न का उत्तर दिया"। लॉगिंग ने किया ट्रिक!
हंस वासिंक

जवाबों:


16

जैसा कि @ कैग्स ने कहा, यह (आसानी से) संभव नहीं है क्योंकि सत्र शुरू होने पर एसीएल का पेड़ लादा जाता है (जब व्यवस्थापक लॉग इन करता है) सिस्टम कॉन्फ़िगरेशन कंट्रोलर में विधि
को ओवरराइड करने के लिए एक संभावित समाधान होगा _isSectionAllowed: ( Mage_Adminhtml_System_ConfigController::_isSectionAllowed) और इसे ACL ट्री को फिर से लोड करें।
कुछ इस तरह:

protected function _isSectionAllowed($section)
{
    $session = Mage::getSingleton('admin/session');
    $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());//reload the tree
    return parent::_isSectionAllowed($secntion); //all the code from the original method
}

लेकिन इसका मतलब यह है कि हर बार जब आप एक कॉन्फ़िगर अनुभाग का उपयोग करते हैं तो ACL पेड़ को फिर से लोड किया जाएगा। मुझे ऐसा करने का कोई मतलब नहीं है।
इसके अलावा, आप इसे एक विशिष्ट विस्तार के लिए नहीं कर सकते। आपको मुख्य वर्ग को फिर से लिखना होगा।


शायद यह बेहतर होगा कि अगर खंड की अनुमति नहीं है तो केवल एसीएल के पेड़ को रीसेट करें। मैं ईमानदारी से कभी भी एक खंड को लोड करने की कोशिश को याद नहीं कर सकता हूं, जिसे मॉड्यूल स्थापित होने से पहले और व्यवस्थापक द्वारा पुनः जारी किए जाने के बाद एसीएल द्वारा अनुमति नहीं दी गई थी।
pspahn

बस एक पागल विचार के बाद से मैंने इसे कभी नहीं आज़माया और मुझे यकीन नहीं है कि यदि इस बिंदु पर सत्र उपलब्ध है, लेकिन क्या यह संभव हो सकता है कि स्थापित स्क्रिप्ट से पुनः लोड किया जाए? बेशक यह केवल तभी काम करता है जब इंस्टॉल स्क्रिप्ट को एक अनुरोध द्वारा ट्रिगर किया जाता है जहां आप व्यवस्थापक के रूप में लॉग इन होते हैं और यह बैकएंड उपयोगकर्ताओं में अन्य लॉग को प्रभावित नहीं करेगा
फेबियन शेंगलर

2
@fschmengler। मैंने इसे पहले नहीं आजमाया है, लेकिन मुझे लगता है कि यह काम कर सकता है। बंट ईमानदारी से मुझे नहीं लगता कि यह परेशानी के लायक है।
मेरियस

9

मुझे इसके आस-पास बहुत कम अनुकूलन के साथ एक रास्ता मिला। हमें क्या चाहिए:

  1. एक नई नियंत्रक क्रिया जो ACL को पुनः लोड करती है (बिना लॉग आउट और इन), फिर पिछले पृष्ठ पर वापस भेज देती है:

    class SSE_AclReload_Adminhtml_Permissions_AclReloadController extends Mage_Adminhtml_Controller_Action
    {
        public function indexAction()
        {
            $session = Mage::getSingleton('admin/session');
            $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
            Mage::getSingleton('adminhtml/session')->addSuccess($this->__('ACL reloaded'));
            $this->_redirectReferer();
        }
    }
  2. admin_norouteहैंडल के लिए एक लेआउट अपडेट । हम इस नई नियंत्रक कार्रवाई का लिंक सीधे एडमिन 404 पेज पर जोड़ देंगे:

    <layout version="0.1.0">
        <adminhtml_noroute>
            <reference name="content">
                <block type="adminhtml/template" name="content.aclReload" after="content.noRoute" template="sse_aclreload/button.phtml" />
            </reference>
        </adminhtml_noroute>
    </layout>
  3. और लिंक के साथ टेम्पलेट:

    <a href="<?php echo $this->getUrl('adminhtml/permissions_aclReload/index'); ?>">
        <?php echo $this->__('Reload ACL'); ?>
    </a>

मैंने इसे Github पर एक छोटे से विस्तार में एक साथ फेंक दिया: SSE_AclReload ( सिस्टम> सिस्टम मेनू पर लिंक भी जोड़ता है )।

जैसे ही व्यवस्थापक / नॉटआउट कार्रवाई को भेजा जाता है, आप ACL को स्वचालित रूप से पुनः लोड करने का भी प्रयास कर सकते हैं, लेकिन मैं 1 को पसंद करता हूं) पता है कि क्या चल रहा है और 2) का विकल्प है।


1

यदि आपको नया एक्सटेंशन स्थापित करने और 404 त्रुटि पृष्ठ प्राप्त करने में कोई समस्या है, तो केवल एक चीज जो आपको करने की आवश्यकता है वह है System > Permissions > Roles। बस भूमिका बचाने के लिए और भूल नहीं है स्पष्ट करने के लिए var/cacheऔर var/seesion और आपकी समस्या को हल किया गया है।


"स्पष्ट var / सत्र"? सभी ग्राहकों को लॉग आउट करने और अपनी गाड़ियाँ खाली करने के लिए? नहीं।
फाबियन शेंगलर

नप, बस सत्र को साफ़ करें, var फ़ोल्डर में
Hiral Unadkat

दुर्भाग्य से यह वही है। सिवाय अगर आप फ़ाइल सत्र हैंडलर का उपयोग नहीं करते हैं। उस मामले में यह कुछ नहीं करता है क्योंकि कोई फाइल नहीं है
फैबियन शेंगलर

फिर आपको सिस्टम> अनुमतियां> भूमिका में जाने और भूमिका को बचाने की आवश्यकता है।
हीरालाल उनादकट

जो हमें आपके उत्तर के साथ दूसरी समस्या में लाता है: भले ही यह काम करता है, यह लॉग आउट और बैक-अप की तुलना में अधिक प्रयास है, जिसे ओपी बचना चाहता है।
फेबियन शेंगलर

0

इसे इस्तेमाल करे:

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