जब मैं Node.js विषयक वर्कफ़्लो का उपयोग करते हुए ड्रुपल को एक विभाजन दोष को कैसे रोकूँ?


33

लक्षण:

कुछ शराबी आदेश विफल; कुछ Drupal पृष्ठ रिक्त हैं।
असफल ड्रश कमांड रिपोर्ट "सेगमेंटेशन फॉल्ट: 11"
अपाचे लॉग (जैसे MAMP में php-error.log) भी उसी त्रुटि को दर्शाता है।

पृष्ठभूमि:

यदि आप अपने विषय के SASS आदि को संकलित करने के लिए एक gulp या ग्रन्ट वर्कफ़्लो का उपयोग करते हैं - तो आप एक समस्या में भाग सकते हैं, जहाँ ड्रश कमांड एक विभाजन दोष 11 को अपाचे के रूप में ड्रुपल पेज को ब्लॉक्स (WSDs) परोसते हैं।

संभावित कारण

ऐसा इसलिए है क्योंकि आपके gruntया gulpवर्कफ़्लो के वातावरण की फाइलें node_modulesग़लती से ड्रुपल द्वारा स्वयं को drush cache-clear allउदाहरण के द्वि-उत्पाद के रूप में पंजीकृत किया जा रहा है । इनमें से दर्जनों .js फाइलें हैं और Drupal उन्हें संभाल नहीं सकता ... यह संभवतः एक PCRE regex है जो मूल कारण है क्योंकि यह कहीं और जाना जाता है। वैसे भी ...

यह हमेशा नहीं होता है

यह स्पष्ट नहीं है कि कुछ मॉड्यूल (उदाहरण के लिए ब्राउज़र सिंक जैसे) एक नोड के रूप में इस त्रुटि को प्रेरित करते हैं। जेएस शैली (यानी गल्प या ग्रंट) वर्कफ़्लो इस तरह से विफल होने से पहले पूरी तरह से काम कर सकता है।


मैं पुष्टि कर सकता हूं कि ब्राउज़र सिंक और gulp-imagemin मेरे लिए भी परेशान थे। नेस्टेड फ़ोल्डरों में कुल मिलाकर .info फाइलें समस्या हैं।
पोलीक्लिक

FYI करें: मैं Drupal के साथ ZURB Foundation का उपयोग करते हुए एक ही मुद्दे पर मिला हूं, drupal.org/node/2514350 का
Scorchio

हम द्रुपाल कोर में इसे ठीक करने की कोशिश कर रहे हैं। इस मुद्दे से अपनी राय और परीक्षण पैच जोड़ें drupal.org/node/2329453
corbacho

वहाँ एक पैच के साथ Drupal 7 के लिए एक मुद्दा है कि हल करती है समस्या: drupal.org/node/619542 वहाँ एक संबंधित (कम गंभीर) ड्रुपल 8 मुद्दा: drupal.org/node/2329453
malcomio

इससे कई ड्रश कमांड भी हमारे लिए फेल हो गए (उदा drush cc all), भ्रम की स्थिति में इजाफा हुआ ।
कोल केटलर

जवाबों:


25

यहां वह उपाय है जिसकी आप तलाश कर रहे हैं। बहुत अधिक सुरुचिपूर्ण और कम काम:

"scripts": {
  "postinstall": "find node_modules/ -name '*.info' -type f -delete"
}

ऊपर @ iamcarico के उत्तर पर बस थोड़ा सा परिवर्तन।

ध्यान दें: आपको निम्नलिखित सामग्री के साथ .npmrc की आवश्यकता हो सकती है:

unsafe-perm = true

यह YML फ़ाइलों के साथ भी होता है :(
टॉम रोजगेरो

7

इसलिए, मेरे पास एक और अधिक सुंदर समाधान है, जो npm स्थापित होने के बाद .info फाइलें हटा देगा। किसी की जरूरत नहीं है, इसलिए यह सुरक्षित होना चाहिए।

अपने पैकेज के अंत में निम्नलिखित जोड़ें। json:

"scripts": {
  "postinstall": "find node_modules/ -name \"*.info\" -type f -delete"
}

पैकेज को संशोधित करने का विचार। जसन फाइलें इतनी अच्छी नहीं हैं, जैसा कि मैं यहां समझाता हूं: drupal.org/node/2309023#comment-9531611
डेविड हेरोन

5

यह मेरे लिए काम करता है:

( इस सूत्र में कारण की पहचान करने के लिए @jorgegc के लिए बहुत धन्यवाद के साथ , मुझे लगा कि विषय यहाँ एक अधिक सामान्य पात्र है।)

  1. ले जाएँ gulpfile.jsऔर package.jsonनई "छिपी" निर्देशिका के लिए.npm
  2. cd .npmऔर npm install( node_modulesनिश्चित रूप से हटाए गए विषय रूट स्तर निर्देशिका को हटाने के बाद )
  3. gulpfile.jsस्रोत और गंतव्य फ़ाइल पथों के लिए आधार निर्देशिका संपादित करें स्निपेट बोले में "../" पथों से पूर्व-निर्धारित थे
  4. बदले में, निर्देशिका के gulpभीतर से कमांड मंगवाएं.npm

Ihit थीम के लिए उदाहरण निर्देशिका संरचना

. ├── .editorconfig ├── .git │   ├── HEAD │   ├── ... ├── .gitignore ├── .jshintrc ├── .npm │   ├── gulpfile.js │   ├── node_modules │   └── package.json ├── assets │   ├── images │   ├── js │   └── sass ├── css │   ├── ihit.hacks.css │   └── ihit.styles.css ├── ihit.info ├── ihit.sublime-project ├── ihit.sublime-workspace ├── images │   ├── logo.png │   ├── search-icon.png │   └── sprite.png ├── js │   └── ihit.behaviors.js ├── php │   ├── ihit_breadcrumb.inc │   ├── ihit_form_search_form_alter.inc │   ├── ihit_menu_link.inc │   ├── ihit_menu_tree.inc │   ├── ihit_preprocess_html.inc │   ├── ihit_preprocess_region.inc │   └── ihit_process_page.inc ├── research │   └── Refills ├── screenshot.png ├── template.php └── templates ├── html.tpl.php ├── node--image_gallery.tpl.php ├── node.tpl.php └── page.tpl.php

Gulpfile.js के प्रमुख

// project-specific var project = { path: { sass: { source: '../assets/sass/**/*.scss', css_dest: '../css' }, // sass . . .


यह था टिकट!
jsheffers

3

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

रूट-स्तर पर स्थापित करने के अन्य लाभ भी हैं, जैसे कि आप अपने पूरे प्रोजेक्ट को एक समान फैशन में देने की अनुमति देते हैं (आपके कस्टम मॉड्यूल, फीचर्स, और थीम इस रूट-स्तरीय कॉन्फ़िगरेशन को साझा कर सकते हैं)। बशर्ते आप समूह sites/all/modulesमें contribऔर customउपनिर्देशिका में, आप आसानी से contrib और अन्य विक्रेता फ़ोल्डर्स को अनदेखा कर सकते हैं।


हमने आपकी टिप्पणी से पहले .npm इंस्टॉलेशन फोल्डर ट्रिक का अनुसरण किया था। फिर हमने गुल्प पर स्विच किया। ट्रैकिंग और लाइनिंग फ़ाइलों के लिए मूल निर्देशिका में नेविगेट करने के लिए gulp-eslint हैंडल नहीं करता है। इसलिए हमने अपनी बिल्ड स्क्रिप्ट (और नोड_मॉडल) को हमारी साइट के डोकरोट के साथ स्थानांतरित कर दिया और अब सब कुछ पूरी तरह से काम करता है। इस उत्तर के लिए धन्यवाद!
एरिक स्टीनबॉर्न

1

यह अभी भी एक समस्या है और मुझे निम्नलिखित त्रुटि भी मिली: Segmentation fault: 11दौड़ने के बाद npm install

मैं gulpसंस्करण का उपयोग करता हूं 3.8.11और संस्करण के nodeसाथ 0.12

मैं आमतौर पर (इस मामले में भी) auroraबेस थीम के रूप में उपयोग करता हूं और स्वयं package.jsonऔर gulp.jsफ़ाइल का उपयोग करता हूं । मेरी package.jsonफ़ाइल में iamcarrico की स्थापना रद्द स्क्रिप्ट है:

  "scripts": {
    "postinstall": "find node_modules -type f -name '*.info' | xargs rm;"
  }

हम्म, इस बिंदु पर मैंने अभी पहचाना है कि पोस्ट स्क्रिप्ट स्क्रिप्ट थोड़ी अलग है, जो मेरी सेगमेंटेशन गलती का कारण हो सकती है। वैसे भी।

मैंने जो किया वह मैंने node_modulesअपने विषय के भीतर निर्देशिका को हटा दिया था rm -rf ./node_modules। ड्रश के साथ कैश को साफ किया drush cc all। तब मैंने इनेह के उपरोक्त निर्देशों का पालन ​​किया ... जब तक कि नहीं। 3 (3 शामिल नहीं), फ़ोल्डर के find node_modules -type f -name '*.info' | xargs rm;अंदर भाग गया .npmऔर चला गया gulp.js, package.jsonऔर node_modulesफ़ोल्डर मूल विषय फ़ोल्डर में एक स्तर तक। मैं gulpबिना विभाजन त्रुटियों के चल सकता था और यहां तक browsersyncकि उम्मीद के मुताबिक काम भी कर सकता था ।



-1

मेरा समाधान अतीत में उदाहरण के लिए ".npm" जैसे छिपे हुए फ़ोल्डर के अंदर नोड सामान को स्थानांतरित करने के लिए था।

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