it-swarm.com.de

Wie verhindere ich, dass Drupal einen Segmentierungsfehler auslöst, wenn ein Node.js-Theming-Workflow verwendet wird?

Symptome:

Einige Drush-Befehle schlagen fehl. Einige Drupal Seiten sind leer.
Die fehlgeschlagenen Drush-Befehle melden "Segmentierungsfehler: 11".
Das Apache-Protokoll (z. B. php-error.log in MAMP) zeigt ebenfalls denselben Fehler.

Hintergrund:

Wenn Sie einen Gulp- oder Grunz-Workflow verwenden, um den SASS Ihres Themas usw. zu kompilieren, kann es zu einem Problem kommen, bei dem Drush-Befehle einen Segmentierungsfehler 11 auslösen, ebenso wie Apache beim Bereitstellen von Drupal Seiten als Leerzeichen ( WSDs).

Wahrscheinliche Ursache

Dies liegt daran, dass Dateien aus Ihrer grunt oder gulp Workflow-Umgebung in node_modules Fehlerhaft von Drupal selbst als Nebenprodukt von] registriert werden drush cache-clear all Zum Beispiel. Es gibt Dutzende dieser .js-Dateien und Drupal kann sie nicht verarbeiten ... es ist möglicherweise ein PCRE-Regex, der die Hauptursache ist, da dies bekannt ist woanders. Wie auch immer ...

Das passiert nicht immer

Es ist nicht klar, ob einige Module (wie z. B. die Browsersynchronisierung) diesen Fehler auslösen, da ein Workflow im Stil von node.js (d. H. Schlucken oder Grunzen) perfekt funktionieren kann, bevor er auf diese Weise fehlschlägt.

33
iainH

Hier ist die Lösung, die Sie suchen. Viel eleganter und weniger Arbeit:

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

Nur eine kleine Änderung in der obigen Antwort von @ iamcarico.

hinweis: Möglicherweise benötigen Sie eine .npmrc mit nur folgendem Inhalt:

unsafe-perm = true
25
Ryan McVeigh

Ich habe also eine etwas elegantere Lösung, bei der die INFO-Dateien nach der Installation von npm einfach entfernt werden. Es werden keine benötigt, daher ist dies sollte sicher.

Fügen Sie am Ende Ihrer package.json Folgendes hinzu:

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

Das funktioniert bei mir:

(Vielen Dank an @jorgegc für die Identifizierung der Ursache in dieser Thread bei d.o. Ich dachte, das Thema hätte hier einen allgemeineren Titel verdient.)

  1. Bewegung gulpfile.js und package.json in das neue "versteckte" Verzeichnis .npm
  2. cd .npm und npm install (nach dem Löschen der Theme-Root-Ebene node_modules Verzeichnis natürlich)
  3. bearbeiten gulpfile.js Basisverzeichnis für Quell- und Zieldateipfade. Im Snippet unten wurde "../" Pfaden vorangestellt
  4. rufen Sie wiederum den Befehl gulp aus dem .npm Verzeichnis

Beispiel für eine Verzeichnisstruktur für das ihit-Thema

. ├── .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

Leiter von gulpfile.js

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

5
iainH

Sie können all dies vermeiden, indem Sie Ihre Workflow-Tools im Stammverzeichnis der Site Drupal Site) installieren. Ein Ordner der obersten Ebene node_modules Wird nicht gescannt.

Die Installation auf Root-Ebene bietet auch andere Vorteile, z. B. die Möglichkeit, Ihr gesamtes Projekt auf einheitliche Weise zu fusseln (Ihre benutzerdefinierten Module, Funktionen und Designs können diese Konfiguration auf Root-Ebene gemeinsam nutzen). Vorausgesetzt, Sie gruppieren sites/all/modules In die Unterverzeichnisse contrib und custom, können Sie Contrib- und andere Anbieterordner leicht ignorieren.

3
Chris Ruppel

Es scheint immer noch ein Problem zu sein und ich habe auch den folgenden Fehler erhalten: Segmentation fault: 11 nach dem Rennen npm install.

Ich benutze gulp version 3.8.11 und node mit der Version 0.12.

Normalerweise verwende ich (auch in diesem Fall) aurora als Basisthema und verwende ein eigenes package.json und gulp.js Datei. Mein package.json Datei enthält iamcarrico's Postinstall-Skript:

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

Hmm, zu diesem Zeitpunkt habe ich gerade erkannt, dass das Postinstall-Skript etwas anders ist, was möglicherweise meinen Segmentierungsfehler verursacht hat. Wie auch immer.

Was ich getan habe war, dass ich das node_modules Verzeichnis in meinem Thema mit rm -rf ./node_modules. Leerte den Cache mit drush drush cc all. Dann folgte ich den obigen Anweisungen von iainh ... bis nein. 3 (3 nicht enthalten), lief find node_modules -type f -name '*.info' | xargs rm; innerhalb der .npm Ordner und verschob die gulp.js, package.json und der node_modules Ordner eine Ebene bis zum ursprünglichen Themenordner. Ich konnte gulp ohne Segmentierungsfehler ausführen und sogar browsersync funktionierte wie erwartet.

1
4aficiona2

Hier ist das Problem auf drupal.org, das dieses Problem behebt, einschließlich Patch https://www.drupal.org/node/232945

1
askibinski