web-dev-qa-db-ja.com

Node.jsテーマワークフローを使用しているときにDrupalセグメンテーション違反の発生を防ぐにはどうすればよいですか?

症状:

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

バックグラウンド:

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

推定原因

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

いつも起こるとは限らない

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

33
iainH

ここにあなたが探しているソリューションがあります。はるかにエレガントで少ない作業:

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

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

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

unsafe-perm = true
25
Ryan McVeigh

だから、私は少しエレガントな解決策を持っています、それはnpmのインストール後に.infoファイルを削除するだけです。何も必要ないので、これShouldは安全です。

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

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

これは私にとってはうまくいきます:

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

  1. gulpfile.jspackage.jsonを新しい「非表示」ディレクトリ.npmに移動します
  2. cd .npmおよびnpm install(もちろん、テーマのルートレベルnode_modulesディレクトリを削除した後)
  3. ソースおよび宛先ファイルパスのgulpfile.jsベースディレクトリを編集します。スニペットでは、「../」がパスの前に付加されていました
  4. 次に、.npmディレクトリ内からgulpコマンドを呼び出します

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

5
iainH

Drupalサイトのルートにワークフローツールをインストールすることで、これらすべてを回避できます。トップレベルのスキャンは行われませんnode_modulesフォルダ。

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

3
Chris Ruppel

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

gulpバージョン3.8.11nodeをバージョン0.12で使用しています。

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

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

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

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

1
4aficiona2

パッチ https://www.drupal.org/node/232945 を含め、この問題に対処するdrupal.orgの問題を次に示します。

1
askibinski