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


34

मैं इस सवाल के जवाब के लिए खोज रहा हूं जिसमें कोई भाग्य नहीं है। डेटाबेस संरचना में मैं जो कुछ भी देखता हूं, उससे मॉड्यूल के स्थान को 'सिस्टम' तालिका में निर्दिष्ट किया जाता है। एकमात्र उपाय मेरे पास 'फ़ाइल नाम' कॉलम को अपडेट करने के लिए SQL क्वेरी लिखना है।

क्या इसे हल करने के लिए एक बेहतर / क्लीनर समाधान है, उदाहरण के लिए, एक कंट्रिब मॉड्यूल?

जवाबों:


27

आपको केवल अपने मॉड्यूल को अपने नए स्थान पर ले जाने और पुन: निर्माण करने की आवश्यकता है। जब रजिस्ट्री मॉड्यूल के लिए पथ rebuilds होगा अद्यतन किया जाएगा। जाँच करें registry_rebuild()

मॉड्यूल में सभी कोड को बचाता है या डेटाबेस में प्रत्येक इंटरफ़ेस या वर्ग के स्थान को संग्रहीत करते हुए निर्देशिकाएं शामिल करता है।

हालाँकि, मैं आपको यह परीक्षण करने से पहले डेटाबेस का बैकअप लेने की सलाह दूंगा।

यदि आप ड्रश का उपयोग कर रहे हैं, तो आप निम्न कमांड का उपयोग करके रजिस्ट्री का पुनर्निर्माण भी कर सकते हैं:

drush cc registry

आप registry_rebuildड्रश के लिए कमांड भी स्थापित कर सकते हैं :

// install registry_rebuild
drush dl registry_rebuild
// rebuild the registry
drush rr

अगर मैं इसे सही ढंग से समझता हूं, तो आप अपनी registry_fileतालिका को भी समाप्त कर सकते हैं , जो सभी फाइलों को फिर से बनाने और तालिका के पुनर्निर्माण के लिए ड्रूपल को मजबूर करेगा।
साइक्लोनोस्कोप

3
टेबल को रौंदना एक बुरे विचार की तरह लगता है और यह पूरी तरह से टूटी हुई साइट में परिणाम देगा।
बरादिर

@ बर्डिर - सहमत हैं कि यह एक बुरे विचार की तरह लगता है। लेकिन, बस कोशिश की और काम करने लगता है। सबसे पहले मैंने एक बैकअप लिया और पूरी तालिका का उपयोग करते हुए अपने में DELETE FROM registry_file;एक कॉल जोड़ दिया । rebuild_registry()page.tpl.php
साइक्लोनोस्कोप

यह जटिल है, बस जॉन लॉइन ने जो कहा है, वह हमेशा मेरे लिए काम कर रहा है।
जिम किर्कपैट्रिक

1
@JimKirkpatrick - आप सही हैं कि मॉड्यूल को अक्षम करने की कोई आवश्यकता नहीं है।
साइक्लोनोस्कोप

10

मैंने स्थानीय रूप से उत्पादन से एक बैकअप बहाल किया और चीजों को स्थानांतरित करने के लिए और व्यवस्थापक / मॉड्यूल को हिट करने या रजिस्ट्री_ट्रिप () चलाने के लिए कोशिश की, लेकिन यह घातक त्रुटियों को फेंकने से नहीं रोक पाया। यह मेरे लिए समझ में आता है क्योंकि कुछ मॉड्यूल अपने हुक_इनिट () में शामिल या जो कुछ भी उपयोग कर सकते हैं, या आपके पास एक मेनू राउटर पथ सेट हो सकता है जो एक मॉड्यूल पर निर्भर करता है या जिसमें ड्रुपल बूटस्ट्रैप पर नहीं मिल सकता है। अंततः, मैंने यही किया है (आपके रास्ते अलग हो सकते हैं):

चरण 1: साइटों / सभी / मॉड्यूल को साइटों / सभी / मॉड्यूल / कंट्रीब से बदलें

UPDATE system SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib');
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib');
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib');

चरण 2: साइटों को बदलें / सभी / मॉड्यूल / साइटों के साथ कंट्रीब / कस्टम नेमस्पेस वाले मॉड्यूल के लिए सभी / मॉड्यूल / कस्टम

UPDATE system SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/custom') WHERE name LIKE 'my_custom_namespace_%';
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/custom') WHERE name LIKE 'my_custom_namespace_%';
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/custom') WHERE filename LIKE '%my_custom_namespace_%';

चरण 3: देव मॉड्यूल को साइटों / सभी / मॉड्यूल / देव में ले जाएँ

UPDATE system SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/dev') WHERE name LIKE 'devel%';
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/dev') WHERE name LIKE 'devel%';
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/dev') WHERE filename LIKE '%devel%';

चरण 4: कैश साफ़ करें ताकि चीजें ठीक से बूटस्ट्रैप हो जाए

TRUNCATE TABLE cache
TRUNCATE TABLE cache_bootstrap
TRUNCATE TABLE cache_menu
TRUNCATE TABLE cache_page
TRUNCATE TABLE cache_path

नोट: यदि आप एक कस्टम मॉड्यूल या 403 को संभालने के लिए LoginToboggan जैसे एक कंट्रास्ट का उपयोग करते हैं (प्रवेश निषेध) और आप इस प्रक्रिया के दौरान लॉग आउट हो गए हैं, तो आपको शामिल फ़ाइल के लिए नए पथ का उपयोग करने के लिए तालिका include_fileमें कॉलम को अपडेट करने की आवश्यकता हो सकती है। menu_roter। यह शायद एक दुर्लभ घटना है।

UPDATE menu_router SET include_file = 'sites/all/modules/custom/my_custom_namespace/includes/foo.inc' WHERE path = 'access-denied'

एक बार इन प्रश्नों के चलने के बाद - जो केवल एक दूसरे विभाजन - हिट एडमिन / डेवलपमेंट / प्रदर्शन को ले जाएगा और कैश को साफ़ कर देगा ताकि मेनू पथ पुन: निर्माण हो सके।


इसके लिए धन्यवाद! मैंने शीर्ष उत्तरों में वर्णित चरणों की कोशिश की, लेकिन इससे मेरे मामले में मदद नहीं मिली। मुझे लगता है कि एक Pantheon द्वारा होस्ट की गई साइट पर किसी को भी आपके जवाब में ये db स्टेटमेंट्स करने की ज़रूरत है और फिर "drush रजिस्ट्री-rebuild" और "drush cc रजिस्ट्री"
ऐनी बोनहम

ओह और पेंटीहोन पर, मुझे कहीं भी रेडिस मॉड्यूल के साथ साइट नहीं मिल सकती है, लेकिन साइटें / सभी / मॉड्यूल - इसलिए मैंने बस एक मॉड्यूल मॉड्यूल रूट फ़ोल्डर में छोड़ दिया और छोड़ दिया। आह अच्छी तरह से - कम से कम मेरे अन्य मॉड्यूल अच्छी तरह से व्यवस्थित हैं।
ऐन बोनहम

LoginToboggan का उपयोग करने वालों के लिए, यहां 3 MySQL कमांड की आवश्यकता होगी:update menu_router set include_file = 'sites/all/modules/contrib/logintoboggan/logintoboggan.admin.inc' WHERE path = 'admin/config/system/logintoboggan'; update menu_router set include_file = 'sites/all/modules/contrib/logintoboggan/logintoboggan.validation.inc' WHERE path = 'toboggan/revalidate/%'; update menu_router set include_file = 'sites/all/modules/contrib/logintoboggan/logintoboggan.validation.inc' WHERE path = 'user/validate/%/%/%';
tyler.frankenstein

9

मार्क सोनबाउम से शांत उपकरण का प्रयास करें: ड्रश पुनर्निर्माण प्रोजेक्ट पथ । यह प्रक्रिया को स्वचालित करता है; मेरे लिए बहुत अच्छा काम किया। बेशक, ड्रश का उपयोग करता है ।

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


7

रिकॉर्ड के लिए, रजिस्ट्री के पुनर्निर्माण के लिए एक शानदार ड्रश कमांड है: http://drupal.org/project/registry_rebuild

परियोजना के पृष्ठ में बहुत सारी जानकारी है।


यह मेरे आसपास घूमने वाले मॉड्यूल का सबसे पसंदीदा तरीका है। मेरे पास कुछ मॉड्यूल थे sites/all/modulesजो सक्षम थे, जिन्हें contribउपनिर्देशिका में स्थानांतरित किया जाना था । मुझे बस drush dl registry_rebuild; mv OLD_PATH/module NEW_PATH/module; drush rr
इतना

इसने मेरे लिए काम किया। मैंने अपने सभी मॉड्यूल्स को पहले स्थानांतरित किया, फिर
17:_ पर

दिलचस्प है, drush rr --fire-bazookaत्रुटियों की ओर जाता है, लेकिन drush rrठीक है।
एलेक्स स्क्रीपनीक

5

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

मुझे यकीन नहीं है कि यह मायने रखता है यदि आप मॉड्यूल को अक्षम करते हैं या नहीं; आप इसे करना चाह सकते हैं, बस मामले में। फिर ऐसा करें:

  1. अपनी साइट को रखरखाव मोड पर (साइटनाम) / व्यवस्थापक / कॉन्फ़िगरेशन / विकास / रखरखाव में रखें
  2. फ़ाइल सिस्टम में अपने मॉड्यूल को भौतिक रूप से स्थानांतरित करें।
  3. (साइटनाम) / व्यवस्थापक / कॉन्फ़िगरेशन / विकास / प्रदर्शन पर अपने कैश को साफ़ करें, या अपने मॉड्यूल पृष्ठ को फिर से सहेजें।

सब कुछ कर दिया! Drupal सभी स्थापित मॉड्यूल के लिए फिर से खोज करेगा।



1
यह मेरे लिए 100% समय की घातक त्रुटियों का कारण बनता है। शायद यह काम करता है यदि आप ऐसे मॉड्यूल ले जाते हैं जिनमें निर्भरता या कुछ और नहीं है।
एर्गोफोब

4

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

यहाँ इसके बारे में एक उद्धरण है (मॉड्यूल के परियोजना पृष्ठ से):

Drupal 7 में कई बार ऐसा होता है जब रजिस्ट्री निराशाजनक रूप से बंद हो जाती है और आपको रजिस्ट्री (PHP कक्षाओं की एक सूची और वे जिन फ़ाइलों के साथ जाते हैं) को फिर से बनाने की आवश्यकता होती है। कभी-कभी, हालांकि, आप इस नियमित कैश-क्लियर गतिविधि को नहीं कर सकते हैं क्योंकि सिस्टम को बूटस्ट्रैप करने के लिए कुछ वर्ग की आवश्यकता होती है।


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

कोई सिद्धांत नहीं ... यह काम करता है। पृष्ठ पर दिए गए निर्देशों का पालन करें। मैंने ड्रश पद्धति का उपयोग किया और यह बस काम कर गया।
इलिन

3

आप रजिस्ट्री पुनर्निर्माण मॉड्यूल का उपयोग कर सकते हैं , जो Drush के माध्यम से एकीकृत करता हैDrush RR कमांड के ।

मूल रूप से आप क्या करते हैं ये चरण हैं:

  1. अपने मॉड्यूल को किसी अन्य निर्देशिका में ले जाएं, और
  2. रजिस्ट्री पुनर्निर्माण फिर मॉड्यूल को सही जगह पर लाने के लिए सिस्टम टेबल का पुनर्निर्माण करेगा।

मैंने पहली बार DrupalEasy Podcast # 133 के माध्यम से इसे सीखा / खोजा , जो आगे बताता है कि इस मॉड्यूल / ड्रश cmd का उपयोग कैसे किया जा सकता है।

पुनश्च: बेशक, पहले अपनी साइट का बैकअप लें ...


3
मैं इसे अपनी सहमति देता हूँ। साइट का बैकअप लें। सभी मॉड्यूल्स को नए फ़ोल्डरों में ले जाएं। ड्रश में रजिस्ट्री का पुनर्निर्माण करें, या बस निर्देशों का पालन करें और इसे चलाने के लिए शामिल php फ़ाइल पर नेविगेट करें। सरल।
कोलिन्स

2

जाएँ / व्यवस्थापक / निर्माण / मॉड्यूल यह सिस्टम तालिका में पथों का पुनर्निर्माण करेगा। कभी-कभी ड्रूपल बूटस्ट्रैप नहीं कर सकता है इसलिए इस मामले में यह समाधान काम नहीं करता है। यदि यह काम नहीं करता है तो आप Drush Rebuild Project Path का उपयोग कर सकते हैं जैसा कि पिछले उत्तर में कहा गया है। हालांकि बूटस्ट्रैप को तोड़ने से पहले आपको नया ड्रश कमांड जोड़ना होगा। नया कमांड जोड़ने के लिए readme के COMMANDS सेक्शन को देखें


2

drush dlमॉड्यूल निर्देशिका समस्याओं के कारण काम न करने से मुझे कुछ परेशानी हुई । आम तौर पर मुझे स्टैक के जवाब पसंद आते हैं जो मैं बस काम करने के लिए पेस्ट कर सकता हूं। यहाँ आपको कुछ पंक्तियाँ मिलेंगी जो Drush Rebuild रजिस्ट्री स्थापित करेंगी और इसे आपकी साइट पर चलाएंगी यदि आप पहले से ही उचित साइट निर्देशिका में हैं।

pushd ~  # good if drush on your site is broken because of moved modules
drush dl -y registry_rebuild
popd 
drush rr

2

मैं एक सच्चे ड्रुपल-एसके उत्तर पर 100% निश्चित नहीं हूं लेकिन अपने अनुभव में:

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

** यह मॉड्यूल जिसे मैंने स्थानांतरित किया है उसके पास एक। स्थापना फ़ाइल नहीं है इसलिए मुझे यकीन नहीं है कि अगर यह मायने रखता है।


स्थापित फ़ाइल केवल मॉड्यूल इंस्टॉलेशन के दौरान कॉल की जाने वाली प्रक्रियाओं के लिए है और आवश्यकता नहीं है। यह काम किया है क्योंकि आपके पास / साइट / सभी / मॉड्यूल के तहत कोई भी फ़ोल्डर संरचना हो सकती है, ड्रुपल .info फ़ाइलों की पुनरावृत्ति के लिए देख रहे होंगे।
gbyte.co 14

@ gbyte.co उस पर स्पष्टीकरण के लिए धन्यवाद! मैं स्थापित फ़ाइल के बारे में जानता था लेकिन ड्रूपल की .info फ़ाइलों की खोज की पुनरावर्ती प्रक्रिया नहीं जानता था। मुझे लगा कि इससे कोई फर्क नहीं पड़ता कि वे किस सबफ़ोल्डर में थे, लेकिन इसका ठोस जवाब देना अच्छा है!
निर्गमन

1

Drupal वितरण यह अच्छी तरह से संभाल नहीं है, इसलिए गलती से हाल ही में के बाद की एक प्रति के साथ समाप्त इकाई एपीआई में sites/all/एक Panopoly साइट पर, इस काम से कोई भी। रजिस्ट्री पुनर्निर्माण, मॉड्यूल पृष्ठ लोड करना और बाकी सब कुछ एक घातक त्रुटि का कारण बना।

मॉड्यूल को अक्षम करना या तो सरल नहीं है, अगर आपको Entity API की तरह कुछ स्थानांतरित करना है जो कि Panopoly में अन्य मॉड्यूल के टन द्वारा आवश्यक है।

इसे हल करने के लिए, Entity API के लिए आप ऐसा कुछ करेंगे:

  1. सिस्टम तालिका में पथ को अपडेट करें:

    UPDATE `system` 
      SET `filename` = REPLACE(
        `filename`, 
        'sites/all/modules/entity', 
        'profiles/panopoly/modules/contrib/entity'
      );
  2. फिर रजिस्ट्री का पुनर्निर्माण करें:

    drush rr

1

द्रुपाल al

सबसे पहले कोशिश करते हैं drush rr

यदि यह काम नहीं करेगा, तो फ़ाइलों को स्थानांतरित करने के बाद, अपने Drupal root dir में निम्न Drush कमांड्स आज़माएँ:

drush sqlq "TRUNCATE cache; TRUNCATE cache_bootstrap;"
php -r "define('DRUPAL_ROOT', getcwd()); require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION); registry_rebuild(); registry_update(); cache_clear_all();"
drush -y cc all

यदि ऊपर काम नहीं करता है, तो उस तालिका को खोजें जिसमें अभी भी पथ के बारे में पुरानी जानकारी है:

drush --ordered-dump sql-dump | grep "sites/all/modules" # Change the path to the old one.

यदि कोई नहीं मिला है, तो इसका मतलब है कि यह आपका बाहरी कैश है।

यदि हां, तो उन्हें पुनः आरंभ करना न भूलें, जैसे:

killall -HUP memcached
drush eval "function_exists('xcache_clear_cache') && xcache_clear_cache();"

और देखें: द्रुपाल में कैश को साफ करने के लिए किस विधि का उपयोग किया जाता है?


वैकल्पिक रूप से आप फ़ाइलों को स्थानांतरित करने के बाद निम्नलिखित MySQL प्रश्नों की कोशिश कर सकते हैं:

UPDATE system SET filename = REPLACE(filename, "sites/all/modules", "sites/newplace/modules") WHERE
       filename LIKE "sites/all/modules/%" AND type = "module"
       AND name IN ("my", "module", "whose", "path", "changed");

UPDATE registry SET filename = REPLACE(filename, "sites/all/modules", "sites/newplace/modules") WHERE
       filename LIKE "sites/all/modules/%"
       AND module IN  ("my", "module", "whose", "path", "changed");

1

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

आप किसी लाइव साइट पर समस्या के बिना अधिकांश कंट्राब मॉड्यूल को सबफ़ोल्डर्स में स्थानांतरित कर सकते हैं। आपको कैश को बाद में साफ करना चाहिए। यदि आप ड्रश का उपयोग नहीं करते हैं और पाते हैं कि आप कैश क्लियरिंग पेज तक नहीं पहुंच सकते हैं, तो आपको /update.php पर आना होगा या कैश टेबल को मैन्युअल रूप से काट देना होगा। इकाई API मॉड्यूल को आगे बढ़ाते समय मुझे केवल अंतिम बिट करना पड़ा।

कोर मॉड्यूल को स्थानांतरित करना तकनीकी रूप से संभव है, लेकिन मैं इसकी सिफारिश नहीं करूंगा और न ही मुझे ऐसा करने का कोई वैध कारण दिखाई देता है।

अपडेट: इकाई एपीआई जैसे मूविंग मॉड्यूल को रजिस्ट्री के पुनर्निर्माण की आवश्यकता हो सकती है। की जाँच करें registry_rebuild पेज।


-4

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


5
यह लंबे समय तक रखरखाव का सिरदर्द है
AgA

यह एक हैक है और फिक्स के आसपास जाता है ... एक अच्छा समाधान नहीं है।
लेलिन

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