AWS Beanstalk CLI 不断部署 react/npm 开发构建

Posted

技术标签:

【中文标题】AWS Beanstalk CLI 不断部署 react/npm 开发构建【英文标题】:AWS Beanstalk CLI keeps deploying react/npm development build 【发布时间】:2019-05-30 08:46:24 【问题描述】:

我有一个 react 应用程序和两个 AWS Beanstalk 实例:开发和生产。我正在尝试将上述 React 应用程序的开发版本部署到开发环境,并将生产版本部署到生产环境。

每个环境都设置了不同的环境变量(应该调用的 API 的 URL),因此输出应该不同。 两个 API URL 在直接通过浏览器调用时都可以工作,所以我知道这不是它们的问题。

我认为在开发中部署的过程是这样的: 对于开发人员:npm start build > eb deploy -e development 对于产品:npm run build > eb deploy -e production

打开开发网页时,一切正常:正在调用开发环境变量并生成一些输出。

但是,当打开生产网页时,我收到一条错误消息(因为缺少环境变量):

This screen is visible only in development. It will not appear if the app crashes in production. Open your browser’s developer console to further inspect this error.

但我认为我的应用只是在生产中崩溃了?这清楚地表明我没有正确部署生产版本。

我哪里做错了?

【问题讨论】:

嗨,您是否尝试检查当前处于活动状态的环境? eb list 向您显示环境列表,并且在活动环境旁边有一个星号 (*)。然后您可以使用 [environment_name] 来选择它,然后进行 eb 部署。或者,您也可以使用 eb deploy -e [environment_name] 嗨@RohitNethi 这实际上是我所做的。我正在部署到正确的环境中,问题是正在部署错误的构建。我调整了我的问题以更好地反映这个问题。 【参考方案1】:

经过几个小时的试验,事实证明 Beanstalk 在重新启动 node.js 应用程序或部署新版本时默认运行命令 npm start。 可以更改此行为(配置 > 软件 > 修改 > 节点命令)。

临时解决方案(当然不是完美的解决方案)是:

设置节点命令为node server.js 安装node.js express framework 在根目录中包含一个文件server.js

server.js:

const express = require('express');
const path = require('path');
const app = express();

app.use(express.static(path.join(__dirname, 'build')));

app.get('/', function(req, res) 
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
);

app.listen(8081);
通过npm run build在本地构建文件 从.gitignore 中删除build/,以便将其包含在本地存储库中

git commit -a(不要不要 git push,除非你有理由这样做)

通过eb deploy再次部署应用程序

【讨论】:

以上是关于AWS Beanstalk CLI 不断部署 react/npm 开发构建的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 使用 CLI 部署时出现 Botocore 错误

如何使用 aws cli 在 Elastic Beanstalk 上上传和部署?

使用 CLI 在 AWS Elastic Beanstalk 上部署 RoR 项目

重命名使用 AWS cli 生成的用于 beanstalk 部署的战争

如何通过 CLI 将 zip 文件上传和部署到 AWS elastic beanstalk?

我正在尝试使用 AWS EB CLI (elastic beanstalk) 部署 python 应用程序