【问题标题】:AWS Beanstalk CLI keeps deploying react/npm development buildAWS Beanstalk CLI 不断部署 react/npm 开发构建
【发布时间】: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 这实际上是我所做的。我正在部署到正确的环境中,问题是正在部署错误的构建。我调整了我的问题以更好地反映这个问题。

标签: reactjs amazon-web-services npm deployment amazon-elastic-beanstalk


【解决方案1】:

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

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

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再次部署应用程序

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2021-06-21
    • 2013-09-23
    • 2015-09-20
    • 2012-11-13
    相关资源
    最近更新 更多