如何为AWS Elastic Beanstalk部署运行npm脚本?

时间:2015-04-23 00:16:29

标签: node.js amazon-web-services elastic-beanstalk

我的package.json有:

  "scripts": {
    "start": "node_modules/.bin/coffee server.coffee",
    "test": "NODE_ENV=test node test/runner.js",
    "coverage": "NODE_ENV=test COVERAGE=1 node test/runner.js -R html-cov test/ > ./test/coverage.html",
    "testw": "fswatch -o test src | xargs -n1 -I{} sh -c 'coffeelint src server.coffee ; npm test'",
    "db:drop": "node scripts/drop-tables.js",
    "encryptConfig": "node_modules/.bin/coffee config/encrypt.coffee",
    "decryptConfig": "node_modules/.bin/coffee config/decrypt.coffee",
    "postinstall": "npm run decryptConfig"
  },

当我部署到Elastic Beanstalk时,我想运行postinstall,但显然它没有这样做。好的,没问题。

我创建了一个名为.ebextensions/00.decrypt.config的文件,其中包含:

commands:
  00-add-home-variable:
    command: sed -i 's/function error_exit/export HOME=\/root\n\nfunction error_exit/' /opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh

container_commands:
  02-decrypt-config:
    command: $NODE_HOME/bin/npm run decryptConfig

然而,这似乎也没有运行。我做错了什么?

2 个答案:

答案 0 :(得分:2)

我找到了解决此问题的方法。 EB实例上的npm二进制文件位于/opt/elasticbeanstalk/node-install/node-{version}中。您应首先确保PATH中存在此内容。

<强> 00_setpath.config

commands:
  01_set_path:
    command: echo 'export PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin' >> /root/.bash_profile
  02_set_path:
    command: export PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin

正如您所看到的,我将附加到.bash_profile并将PATH添加到当前shell。前者应该足以满足您的目的。我添加了第二个,因为我在npm的脚本中使用package.json命令,似乎这些脚本在同一个shell中运行。 TL / DR:您现在应该可以在两个地方使用npm

至于你的npm脚本,请尝试使用prestart代替postinstall

答案 1 :(得分:1)

一些建议:

  • 尝试将命令括在引号中,这是一项要求
  • 另外,不确定$ NODE_HOME是否正常工作 - 你能运行像echo $ NODE_HOME&gt;这样的简单测试吗? /tmp/test.txt?