Node.jsテーマワークフローを使用しているときにDrupalがセグメンテーションフォールトを発生させないようにするにはどうすればよいですか?


33

症状:

一部のブラシコマンドは失敗します。一部のDrupalページは空白です。
失敗したdrushコマンドは「Segmentation fault:11」を報告します
。Apacheログ(MAMPのphp-error.logなど)にも同じエラーが表示されます。

バックグラウンド:

gulpまたはgruntワークフローを使用して(テーマのSASSなどをコンパイルするために)、Drupalページを空白(WSD)として提供しているときに、drushコマンドがApacheと同様にセグメンテーションフォールト11をスローする問題が発生する場合があります。

推定原因

これは、ユーザーgruntまたはgulpワークフロー環境 からのファイルnode_modulesdrush cache-clear all、たとえばDrupal自体の副産物として誤って登録されているためです。これらの.jsファイルは数十個あり、Drupalはそれらを処理できません...これはおそらく他の場所で知られているように、根本的な原因であるPCRE正規表現です。とにかく...

常に起こるとは限らない

node.jsスタイル(つまり、gulpまたはgrunt)ワークフローがこの方法で失敗する前に完全に機能するため、一部のモジュール(たとえばBrowser Syncなど)がこのエラーを引き起こすかどうかは明らかではありません。


Browser Syncとgulp-imageminが私にとっても面倒だったことを確認できます。ネストされたフォルダー内の全体的な.infoファイルが問題です。
ポリクリック

FYI:私はDrupalのでZURB財団を使用して、同じ問題に会った、問題の参照drupal.org/node/2514350
Scorchio

これをDrupalコアで修正しようとしています。この問題からの意見とテストパッチを追加drupal.org/node/2329453
corbacho

問題を解決したパッチとDrupalの7のための問題があります:drupal.org/node/619542(軽度)関連のDrupal 8の問題があります:drupal.org/node/2329453
malcomio

また、これにより多くのDrushコマンドが失敗し(例:)drush cc all、混乱が増しました。
コールケトラー

回答:


25

お探しのソリューションは次のとおりです。はるかにエレガントで少ない作業:

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

上記の@iamcaricoの答えを少し変更しただけです。

注:次の内容だけの.npmrcが必要になる場合があります。

unsafe-perm = true

YMLファイルでも発生するようです:(
Tom Roggero

7

したがって、npmインストール後に.infoファイルを削除するだけの、よりエレガントなソリューションがあります。必要ないので、これは安全なはずです。

package.jsonの最後に次を追加します。

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

私はここで説明してpackage.jsonファイルを変更するためのアイデアは、良いようではありません。drupal.org/node/2309023#comment-9531611
デヴィッド・ヘロン

5

これは私のために働く:

このスレッドの原因を特定してくれた@jorgegcに感謝します。ここでは、このトピックがより一般的なタイトルに値すると思いました。)

  1. 移動gulpfile.jsおよびpackage.json新しい「隠された」ディレクトリに.npm
  2. cd .npmそしてnpm installnode_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 14年

3

Drupalサイトのルートにワークフローツールをインストールすることにより、このすべてを回避できます。最上位のnode_modulesフォルダーはスキャンされません。

ルートレベルでのインストールには、プロジェクト全体を統一した方法でリントできるなど、他の利点もあります(カスタムモジュール、機能、テーマはこのルートレベルの構成を共有できます)。サブディレクトリにグループsites/all/modules化するcontribcustom、contribおよび他のベンダーフォルダを簡単に無視できます。


以前に、コメントの上にある.npmインストールフォルダーのトリックをたどっていました。次に、Gulpに切り替えました。gulp-eslintは、ファイルを追跡およびリントするための親ディレクトリへの移動を処理しません。そのため、ビルドスクリプト(およびnode_modules)をサイトのdocrootの横に移動しましたが、すべて正常に動作するようになりました。この答えをありがとう!
エリックスタインボーン

1

それでも問題があるようで、次のエラーが発生しました:Segmentation fault: 11実行後npm install

私が使用しgulpたバージョン3.8.11nodeバージョンでは0.12

私は通常(この場合も)auroraベーステーマとして使用し、独自のファイルを使用package.jsongulp.jsます。私のpackage.jsonファイルには、iamcarricoのポストインストールスクリプトが含まれています。

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

うーん、この時点で、ポストインストールスクリプトがわずかに異なることを認識しました。これは、セグメンテーションエラーを引き起こした可能性があります。とにかく。

私がやったのはnode_modules、テーマでディレクトリを削除したことrm -rf ./node_modulesです。drushでキャッシュをクリアしましたdrush cc all。その後、上記のiainhの指示に従いました ... 3(含まれていない3)、RAN find node_modules -type f -name '*.info' | xargs rm;内の.npmフォルダが移動gulp.jspackage.jsonおよびnode_modules元のテーマフォルダへフォルダ一段階アップ。gulpセグメンテーションエラーなしで実行できbrowsersync、期待どおりに動作することさえできました。



-1

私の解決策は、たとえば「.npm」のような隠しフォルダー内にノードを移動することでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.