रजिस्ट्री टेबल का पुनर्निर्माण कैसे करें?


9

मैंने registryअन्य समस्याओं के कारण तालिका को छोटा कर दिया है, लेकिन अब मुझे registryडेटाबेस में सूचीबद्ध फ़ाइलों के आधार पर तालिका के पुनर्निर्माण में समस्या है।

मैं फोन कर रहा हूँ registry_update(), _registry_update()या registry_rebuild()करने के लिए:

drush eval "registry_rebuild();"

लेकिन फिर मुझे निम्नलिखित त्रुटि दिखाई दी जो दिखाई देती है:

घातक त्रुटि: लाइन 15 में शामिल / pager.inc में वर्ग 'SelectQueryExtender' नहीं मिला

डिफ़ॉल्ट रूप से ( systemमॉड्यूल इंस्‍टॉल पर) registryटेबल खाली है, इसलिए Drupal उस तालिका को उचित डिफ़ॉल्ट डेटा कैसे भरता है?

जवाबों:


15

इसे करने का सबसे आसान तरीका है, किसी भी मॉड्यूल को सक्षम करना, जैसा कि वह आपके लिए करेगा। बेशक, अगर आपको रजिस्ट्री को फिर से बनाने की आवश्यकता है, तो आम तौर पर बोलना यूआई अनुपलब्ध हो सकता है, लेकिन drush en [modulename]आप सभी की आवश्यकता हो सकती है।

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

एक्सटेंशन इंस्टॉल करें, और चलाएं drush rr

मॉड्यूल पृष्ठ में विस्तृत इंस्टॉलेशन निर्देश हैं और यह भी दिखाता है कि यदि आवश्यक हो, तो इसे बिना ड्रम के कैसे चलाया जाए।


9

यह या तो Drupal को पुनर्स्थापित करके या Drupal के एक आदर्श रूप से ताज़ा इंस्टॉलेशन से तालिका को अपने टूटे हुए इंस्टेंस में कॉपी करके तय किया जा सकता है।

या आप निम्नलिखित समाधान आज़मा सकते हैं (केवल तब ही करें जब आपका ड्रुपल उदाहरण पहले से ही टूट गया हो):

  1. पुरानी रजिस्ट्री तालिका को पहले बैकअप लें (बस मामले में):

    drush sqlq "CREATE TABLE registry_bak LIKE registry; INSERT INTO registry_bak SELECT * FROM registry;"
    drush sqlq "CREATE TABLE system_bak LIKE system; INSERT INTO system_bak SELECT * FROM system;"
  2. बूटस्ट्रैप कैश और रजिस्ट्री तालिका साफ़ करें।

    drush sqlq "TRUNCATE cache_bootstrap; TRUNCATE registry"
  3. मूल डेटा को रजिस्ट्री तालिका में डालें:

    drush sqlq 'INSERT INTO registry (name, type, filename) VALUES ("SelectQueryExtender", "class", "includes/database/select.inc"), ("DrupalDefaultEntityController", "class", "includes/entity.inc");'
    drush eval "registry_update();"
  4. कैश साफ़ करें:

    drush -y cc all
  5. यदि 4 में स्पष्ट कैश नहीं है, तो कुछ अन्य लापता वर्गों के कारण, आप या तो:

    a) मिसिंग कक्षाओं को मैन्युअल रूप से जोड़ें, उदाहरण के लिए:

    $ drush -y cc all
    Fatal error: Class 'Entity' not found in profile2.module on line 593
    $ grep -Rwl "^class Entity" .
    ./sites/all/modules/entity/includes/entity.inc
    $ drush sqlq 'INSERT INTO registry (name, type, filename) VALUES ("Entity", "class", "sites/all/modules/entity/includes/entity.inc");'
    $ drush -y cc all # testing...
    # If Fatal error:, repeat 5a. again.

    या:

    ख) इन असफल कंट्रीब्यूट मॉड्यूल (जैसे प्रोफाइल 2, नियम) को अक्षम करने का प्रयास करें:

    drush sqlq 'UPDATE system SET status = 0 WHERE name = "failing_module"'

    और 4 से शुरू होने वाले चरणों को दोहराएं।

  6. यदि कुछ इससे अधिक टूट गया था, तो आप अपनी तालिका को मूल बिंदु पर पुनर्स्थापित कर सकते हैं (जो 1. चरण में किया गया था):

    drush sqlq "TRUNCATE registry; INSERT INTO registry SELECT * FROM registry_bak;"
    drush sqlq "TRUNCATE system; INSERT INTO system SELECT * FROM system_bak;"

    और फिर प्रयत्न करें।

यह भी देखें: कैसे स्थापित मॉड्यूल को / साइटों / सभी / मॉड्यूल / * से / साइटों / सभी / कंट्रीब / मॉड्यूल / * पर ले जाएं


registryDrupal webroot में निम्न स्क्रिप्ट द्वारा बनाई गई पुनर्निर्माण तालिका भी प्राप्त की जा सकती है:

grep -ERo "^(\s+)?(abstract )?class (\S+)" . | tr ':' ' ' | sed "s/abstract //g" | awk '{print "INSERT INTO registry (filename, type, name) VALUES (\x27"$1"\x27,\x27"$2"\x27,\x27"$3"\x27);"}' | $(drush sql-connect) -f

रेक्स के साथ माइक की मदद के लिए धन्यवाद ।


4
thx - चरण 3 ने मुझे बचाया जहाँ drush rrअसफल रहा
ErichBSchulz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.