我在部署后遇到执行命令的问题,我有一些node.js项目和脚本,这个脚本使用来自node_modules的一些bin,如果我在.ebextensions / .config中编写脚本命令,他会在npm install和return之前执行错误("node_modules/.bin/some": No such file or directory
)。如何在部署后执行命令。感谢。
答案 0 :(得分:10)
我找到了以下解决方案
我添加到beanstalk config next命令:
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/some_job.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
cd /var/app/current
export PATH=$PATH:$(ls -td /opt/elasticbeanstalk/node-install/node-* | head -1)/bin
npm run some_script
此命令为post-hooks脚本创建(如果不存在)文件夹并添加bash脚本。此文件夹中的脚本仅在安装npm后执行,这对我的问题非常重要。
感谢这位家伙http://junkheap.net/blog/2013/05/20/elastic-beanstalk-post-deployment-scripts/
答案 1 :(得分:2)
创建一个名为.ebextensions/post_actions.config
的文件:
container_commands:
<name of container_command>:
command: "<command to run>"
这将在提取代码后执行,但在启动之前执行。
答案 2 :(得分:-2)
如果您阅读AWS ebextensions documentation,他们会提到执行,特别是他们提到所有命令都在部署应用程序版本之前执行。
“您可以使用container_commands键为您的命令执行命令 容器。在container_commands中的命令被处理 按名称字母顺序。它们在应用程序和Web之后运行 服务器已设置且应用程序版本文件已设置 提取,但在部署应用程序版本之前。“
如果你再次部署它应该可以工作;这是因为您的应用程序已经解压缩。然而,这不是一个有效的解决方案,因为每个生成的新实例都会出错。