我的node.js应用程序由两个部分组成,一个快速后端和一个反应前端。
我在这个结构中有两个package.json文件
package.json
/app/package.json
我想要做的是在我的前端文件夹app中运行一个脚本来构建我的代码。
我想要投放的脚本是npm install
和npm run build
部署发生后如何运行此脚本?
commands:
01_app_npm_install:
command: npm install
cwd: app/
02_app_npm_build:
command: npm run build
cwd: app/
但它返回一个错误,说“没有这样的文件或直接 保守党:'app /'."
这可以在aws弹性豆茎上做到吗?
答案 0 :(得分:4)
我还没有使用Elastic Beanstalk完成nodejs,但我做了很多Django。
commands:
部分在项目文件到位之前运行。您可以在此处安装服务器软件包。
container_commands:
部分在文件放入其最终目的地之前在暂存目录中运行(对于nodejs来说似乎是/ var / app / current)。如果需要,您可以在此处修改文件。
上述参考: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
您还可以运行后部署脚本。这没有很好的记录(至少它不是)。你可以这样做:
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
service httpd restart
答案 1 :(得分:1)
感谢@gustaf和其他一些网站,我设法将解决方案整合在一起。它不漂亮但它有效。
我在.ebextensions/01_build.config
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_build_app.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
cd /var/app/current/app/
sudo /opt/elasticbeanstalk/node-install/node-v6.2.2-linux-x64/bin/npm install
sudo /opt/elasticbeanstalk/node-install/node-v6.2.2-linux-x64/bin/npm run build
硬编码节点版本并不完美,但现在可以使用。
答案 2 :(得分:0)
如果你参考文档,你会发现commands
是应该放置应用相关内容的地方。
根据各个部分的偏好执行文件,container_commands
是第一个,/var/app/current
是最后一个。在此阶段,应用程序尚未复制到所需位置(container_commands
)。
此外,如果您设置了环境变量,则只能在int product_col2Xcol3 = 0;
int sum_totalcol2Xcol3 = 0;
//Calculations of the SUM(Product) of col2 and col3
for (int row = 0; row < r; row++)
{
product_col2Xcol3 = matrix[row, col2] * matrix[row, col3];
sum_totalcol2Xcol3 = sum_totalcol2Xcol3 + product_col2Xcol3 ;
}
// why 2* ?????? think it shouldn't be there.
Console.WriteLine("Total is :" + 2*sum_totalcol2Xcol3 );
中使用这些变量。
答案 3 :(得分:0)
从 Amazon Linux 2 开始,您必须使用 Platform Hooks。此处的其他答案仅适用于 Amazon Linux AMI 平台版本。
例如在您的应用程序根目录中,创建
<块引用>.platform/hooks/postdeploy
文件夹,然后创建一个名为 service-httpd-restart.sh 的文件
内容为
#!/usr/bin/env bash
service httpd restart
做和Gustaf's comment一样的事情。