web-dev-qa-db-ja.com

NodeJSをElasticBeanstalkにデプロイする際のNPMエラー

次のエラーが発生します:

 5065 verbose linkBins [email protected]
5066 verbose linkMans [email protected]
5067 verbose rebuildBundles [email protected]
5068 verbose rebuildBundles [ 'bindings', 'nan' ]
5069 info install [email protected]
5070 verbose unsafe-perm in lifecycle false
5071 info [email protected] Failed to exec install script
5072 verbose stack Error: [email protected] install: `node-gyp rebuild`
5072 verbose stack Exit status 1
5072 verbose stack     at EventEmitter.<anonymous> (/opt/elasticbeanstalk/node-install/node-v4.2.1-linux-x64/lib/node_modules/npm/lib/utils/lifecycle.js:214:16)
5072 verbose stack     at emitTwo (events.js:87:13)
5072 verbose stack     at EventEmitter.emit (events.js:172:7)
5072 verbose stack     at ChildProcess.<anonymous> (/opt/elasticbeanstalk/node-install/node-v4.2.1-linux-x64/lib/node_modules/npm/lib/utils/spawn.js:24:14)
5072 verbose stack     at emitTwo (events.js:87:13)
5072 verbose stack     at ChildProcess.emit (events.js:172:7)
5072 verbose stack     at maybeClose (internal/child_process.js:818:16)
5072 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
5073 verbose pkgid [email protected]
5074 verbose cwd /tmp/deployment/application
5075 error Linux 4.1.10-17.31.amzn1.x86_64
5076 error argv "/opt/elasticbeanstalk/node-install/node-v4.2.1-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v4.2.1-linux-x64/bin/npm" "--production" "rebuild"
5077 error node v4.2.1
5078 error npm  v2.14.7
5079 error code ELIFECYCLE
5080 error [email protected] install: `node-gyp rebuild`
5080 error Exit status 1
5081 error Failed at the [email protected] install script 'node-gyp rebuild'.
5081 error This is most likely a problem with the sse4_crc32 package,
5081 error not with npm itself.
5081 error Tell the author that this fails on your system:
5081 error     node-gyp rebuild
5081 error You can get their info via:
5081 error     npm owner ls sse4_crc32
5081 error There is likely additional logging output above.
5082 verbose exit [ 1, true ]

package.json

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "test": "mocha"
  },
  "dependencies": {
    "async": "^0.8.0",
    "aws-sdk": "^2.2.21",
    "bcrypt-nodejs": "0.0.3",
    "body-parser": "^1.0.2",
    "config": "^1.16.0",
    "cors": "^2.7.1",
    "crypto": "0.0.3",
    "crypto-js": "^3.1.5",
    "debug": "^0.7.4",
    "express": "^4.0.0",
    "express-jwt": "^0.4.0",
    "express-validator": "^2.3.0",
    "fs": "0.0.2",
    "jade": "^1.3.1",
    "jsonwebtoken": "^5.0.0",
    "mongoose": "^4.0.0",
    "morgan": "^1.0.1",
    "multer": "^1.1.0",
    "nodemailer": "^1.8.0",
    "os-shim": "^0.1.3",
    "Prompt": "^0.2.14",
    "request": "^2.67.0",
    "validator": "^3.22.1"
  },
  "devDependencies": {
    "chai": "^1.9.1",
    "chance": "^0.5.9",
    "mocha": "^1.18.2",
    "node-inspector": "^0.12.3",
    "supertest": "^0.13.0"
  }
}

EBコンソールでスローされたエラー:

2015-12-05 08:44:49 UTC+0700    ERROR   During an aborted deployment, some instances may have deployed the new application version. To ensure all instances are running the same version, re-deploy the appropriate application version.
2015-12-05 08:44:49 UTC+0700    ERROR   Failed to deploy application.
2015-12-05 08:44:49 UTC+0700    ERROR   Unsuccessful command execution on instance id(s) 'i-65c4d5dc'. Aborting the operation.
2015-12-05 08:44:49 UTC+0700    INFO    Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
2015-12-05 08:44:49 UTC+0700    ERROR   [Instance: i-65c4d5dc] Command failed on instance. Return code: 1 Output: (TRUNCATED)..."/opt/elasticbeanstalk/containerfiles/ebnode.py", line 166, in npm_install raise e subprocess.CalledProcessError: Command '['/opt/elasticbeanstalk/node-install/node-v4.2.1-linux-x64/bin/npm', '--production', 'rebuild']' returned non-zero exit status 1. Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

これが私が試している.ebextensions/config.configです:

packages:
  yum:
    gcc: []
    make: []
    openssl-devel: []
    libxml2: []
    libxml2-devel: []
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" :
    mode: "000775"
    owner: root
    group: root
    content: |
      #!/bin/bash
      function error_exit
      {
      eventHelper.py --msg "$1" --severity ERROR
      exit $2
      }

      export HOME=/home/ec2-user # ADDED EXPORT COMMAND
      echo "export home" # JUST FOR REMARK

      OUT=$(/opt/elasticbeanstalk/containerfiles/ebnode.py --action npm- install 2>&1) || error_exit "Failed to run npm install. $OUT" $?
      echo $OUT

エラーはnode-gypまたはsse4_crc32から発生しているようです。

これを克服するために.ebextensionsファイルで使用する必要のある構成はありますか?

ありがとう

12
Phil Hudson

解決しました。

EB設定ファイルで修正されました。それへの私のパスは.ebextensions/config.configでした

packages:
  yum:
    gcc: []
    make: []
    openssl-devel: []
    libxml2: []
    libxml2-devel: []
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" :
    mode: "000775"
    owner: root
    group: root
    content: |
      #!/bin/bash
      function error_exit
      {
      eventHelper.py --msg "$1" --severity ERROR
      exit $2
      }

      export HOME=/home/ec2-user # ADDED EXPORT COMMAND
      echo "export home" # JUST FOR REMARK

      OUT=$(/opt/elasticbeanstalk/containerfiles/ebnode.py --action npm- install 2>&1) || error_exit "Failed to run npm install. $OUT" $?
      echo $OUT

NPMタスクのホームディレクトリがその役割を果たしているようです。

Mac GUIでプロジェクトを圧縮しても、隠しファイルは圧縮されません。これは、コマンドラインで次のコマンドを使用して実行することで解決できます。

Zip -r archive_name.Zip * .*
15
Phil Hudson