hook_schema डेटाबेस टेबल नहीं बना रहा है


12

निम्नलिखित फ़ंक्शन process_login.install में एक कस्टम मॉड्यूल के भाग के रूप में समाहित है जिसे process_login कहा जाता है। मॉड्यूल काम करता है अगर मैंने मैन्युअल रूप से डेटाबेस तालिका बनाई है, लेकिन स्वाभाविक रूप से मैं तालिका को स्वचालित रूप से स्थापित करना चाहूंगा।

मॉड्यूल को स्थापित करने पर फ़ंक्शन स्वयं एक स्कीमा त्रुटि उत्पन्न नहीं करता है। लेकिन न तो यह Drupal 7 MySQL डेटाबेस में डेटाबेस टेबल process_login_register बनाता है।

साइट रिपोर्ट द्वारा बताई गई कोई अन्य त्रुटियां मुझे नहीं दिख रही हैं, या समस्याएं हैं।

मैंने इसे पूरी तरह से हटा दिया है और कई बार पुनः इंस्टॉल किया है। मैंने वेब को बड़े पैमाने पर खोजा है, और ड्रुपल विकास पर मेरे पास मौजूद दो पुस्तकों से परामर्श किया है। मैं इस फ़ंक्शन (नीचे सूचीबद्ध) के साथ कुछ भी गलत नहीं देख सकता।

नोट: मैंने धारावाहिक के रूप में 'id' को परिभाषित करने की कोशिश की है, लेकिन एक ही परिणाम प्राप्त करें (अर्थात कोई तालिका नहीं बनाई गई)।

मैंने विचारों से भाग लिया है। क्या किसी को पता है कि यह कार्य क्यों नहीं कर रहा है?

function process_login_schema(){
  $schema['process_login_register'] = array(
        'description' => 'Register a specific computer with the system.',
        'fields' => array(
                'id' => array(
                    'description' => 'Primary identifier.',
                    'type' => 'int',
                    'unsigned' => TRUE,
                    'size' => 'normal',
                    'not null' => TRUE,
                    'default' => 0,
                ),
                'ip' => array(
                        'description' => "The user's IP address at registration.",
                        'type' => 'varchar',
                        'length' => 32,
                        'not null' => TRUE,
                        'default' => '',
                ),
                'user_agent' => array(
                        'description' => "The user's browser user agent string at registration.",
                        'type' => 'varchar',
                        'length' => 255,
                        'not null' => TRUE,
                        'default' => '',
                ),
        ),
        'primary key' => array('id'),
  );
  return $schema;
}

क्या Drupal संस्करण का उपयोग कर रहे हैं?
googletorp

3
क्या आपने वास्तव में फ़ंक्शन लिखने के बाद से मॉड्यूल को अनइंस्टॉल और रीइंस्टॉल किया गया है (न कि केवल अक्षम और पुन: सक्षम) मॉड्यूल?
क्लाइव

Drupal 6 को हुक_इंस्टॉल में drupal_install_schema () को कॉल करने की आवश्यकता है। Drupal 7 में इसे स्पष्ट रूप से न कहने की सिफारिश की गई है।
शोएब नवाज

उपरोक्त उत्तर: द्रुपाल 7. हां। मैं Drupal 7 का उपयोग कर रहा हूं इसलिए drupal_install_schema () को कॉल नहीं कर रहा हूं।
user8109

1
@ user8109 मॉड्यूल में दो पूरी तरह से अलग चीजें स्थापित करने / स्थापित करने और अक्षम करने / स्थापित करने में सक्षम हैं। एक मॉड्यूल को सक्षम करना (इसे मॉड्यूल पेज में जांचना और 'सबमिट' दबा देना) केवल एक मॉड्यूल को सक्षम करेगा, और आह्वान करेगा hook_enable()। मॉड्यूल को स्थापित करने के बाद ही इसे अनइंस्टॉल किया जा सकता है (अनइंस्टॉल टैब या डेवेल / रीइंस्टॉल का उपयोग करके), जिसके बाद मॉड्यूल द्वारा बनाई गई सभी तालिकाओं को हटा दिया जाता है। आप तो मॉड्यूल इंस्टॉल करते हैं, hook_install()चलाया जाता है के रूप में आप उम्मीद थी
क्लाइव

जवाबों:


22

उपयोग करें drush dre -y [module]जो अक्षम करता है, uninstalls और फिर मॉड्यूल को फिर से सक्षम करता है। -yझंडा, यह और भी तेज़ बनाता परहेज आप प्रेस करने के लिए है y और तीन बार दर्ज करें।


16

यदि आप किसी मॉड्यूल को अनइंस्टॉल करते हैं, और बाद में इसे फिर से स्थापित करते हैं, तो इसके साथ उपयोग करने वाले डेटाबेस टेबल और hook_schema()फिर से बनाए जाने की घोषणा करते हैं।

मॉड्यूल की स्थापना रद्द करने के लिए, आपको निम्न करने की आवश्यकता है:

  • मॉड्यूल के लिए दिखाए गए चेकबॉक्स को अनचेक करें

    स्क्रीनशॉट

  • सहेजें कॉन्फ़िगरेशन पर क्लिक करें

    स्क्रीनशॉट

  • पर क्लिक करें: अनइंस्टॉल_ टैब

  • मॉड्यूल नाम के बाईं ओर स्थित चेक बॉक्स पर क्लिक करें
  • अनइंस्टॉल बटन पर क्लिक करें

    स्क्रीनशॉट

  • अगले पृष्ठ पर, पुष्टि करें कि आप अनइंस्टॉल बटन पर क्लिक करके उस मॉड्यूल को अनइंस्टॉल करना चाहते हैं

    स्क्रीनशॉट

विकल्प के रूप में, यदि आपने ड्रश स्थापित किया है, तो आप निम्न कमांड का उपयोग कर सकते हैं।

drush pm-disable $module
drush pm-install $module
drush en $module

$moduleमॉड्यूल के संक्षिप्त नाम के साथ, एपिसेस के बीच और .module एक्सटेंशन के बिना बदलें ।

आपने जो किया है वह मॉड्यूल को अक्षम कर रहा है, और फिर इसे फिर से सक्षम कर रहा है। यहां तक ​​कि अगर आपने ड्रुपल के लिए मॉड्यूल युक्त निर्देशिका को हटा दिया है, तो आपने जो किया है वह सिर्फ अक्षम है, और फिर इसे फिर से सक्षम करना है।


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