2015-04-23 113 views
1

package.json有:如何为AWS Elastic Beanstalk部署运行npm脚本?

"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" 
    }, 

当我部署到弹性魔豆,我想运行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 

然而,这似乎并不要么运行。我做错了什么?

+1

尝试引用你的命令,这是一个要求 – sap1ens

+0

另外,不知道是否$ NODE_HOME工作 - 你可以运行简单的测试,如echo $ NODE_HOME> /tmp/test.txt? – sap1ens

+0

您可以检查/var/log/eb-activity.log和/var/log/eb-commandprocessor.log。这些文件会告诉你这些命令执行时发生了什么。 –

回答

1

几点建议:

  • 尽量附上你的命令在引号,这是一个要求
  • 另外,不知道$ NODE_HOME工作 - 可以运行简单的测试样回声$ NODE_HOME>/tmp目录/test.txt?
1

我想出了解决此问题的解决方法。 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。前者应该足以满足你的目的。我添加了第二个,因为我在我的package.json的脚本中使用npm命令,看起来这些脚本在同一个shell中运行。 TL/DR:您现在应该可以在两个地方使用npm

至于你的npm脚本,请尝试使用prestart而不是postinstall

相关问题