如何让 Cloud Foundry 从 React 应用程序中的特定 .env 文件中读取?

Posted

技术标签:

【中文标题】如何让 Cloud Foundry 从 React 应用程序中的特定 .env 文件中读取?【英文标题】:How can I make cloud foundry read from specific .env file in react app? 【发布时间】:2022-01-11 05:39:30 【问题描述】:

我有一个 react 应用,它有 .env.development.env.test.env.production 文件。他们每个人都只设置了 REACT_APP_PROFILE 变量,并且他们的值设置为 devtestprod相应地。

我使用npm run build 命令部署我的应用程序并使用cf push 命令将其推送到云代工厂,并打印出 process.env.REACT_APP_PROFILEprocess.env.NODE_ENV 屏幕上的变量。

我在 vmw 应用程序管理器中只有一个名为 'dev' 的空间。我希望这个空间读取 .env.test 文件,但它从 .env.production 文件中读取(可能是因为我运行了npm run build 命令)。

我的问题是:

1- 如何使应用管理器中的空间 'dev' 从我的 .env.development.env.test 中读取文件?

2- 我应该在应用管理器中为每个环境创建不同的空间吗?如果是,那么我可以定义不同的 ma​​nifest.yml 文件,例如 manifest-test.yml、manifest-prod.yml 吗?我现在只有一个 ma​​nifest.yml 文件,其内容如下:

---
applications:
  - name: myreactapp
    instances: 1
    memory: 64M
    path: build/
    timeout: 120
    routes:
      - route: myreactapp.apps.xxx.xxx
    buildpack: staticfile_buildpack

【问题讨论】:

【参考方案1】:

如何使应用管理器中的空间“dev”从我的 .env.development 或 .env.test 文件中读取?

我不认为这是特定于 CF 的。这只是由您推送到 CF 的文件造成的。

(可能是因为我运行了 npm run build 命令)。

这也是我的想法。您正在使用 cf push 部署该命令的输出。如果输出是使用生产模式构建的,那么您只会看到生产,直到您将构建过程更改为在调试模式下生产某些东西。

2- 我应该在应用管理器中为每个环境创建不同的空间吗?如果是,那么我可以定义不同的 manifest.yml 文件,例如 manifest-test.yml、manifest-prod.yml 吗?我现在只有一个 manifest.yml 文件,内容如下:

这完全取决于您以及您希望如何组织和控制对应用程序的访问。我认为控制访问通常是对空间设计影响最大的因素。

您可以邀请不同的开发者到每个空间。例如,如果你有 dev 和 prod 在不同的空间,那么你可以有效地限制对 prod 的访问。您可以邀请整个团队进行开发,但也许只有您的 SRE 团队进行开发。如果您将所有应用程序放在同一个空间中,那么您就无法做出这种区分。

同时,更多的空间需要管理更多的工作,所以如果您不需要区分这种类型的访问控制,那么使用更少的空间可能更容易。

【讨论】:

以上是关于如何让 Cloud Foundry 从 React 应用程序中的特定 .env 文件中读取?的主要内容,如果未能解决你的问题,请参考以下文章

IBM 发布Cloud Private:基于Kubernetes和Cloud Foundry

Cloud Foundry 任务 - 从服务实例调用 REST API

cloud Foundry 404,但本地tomcat很好

如何将 Spring Boot 部署到 Cloud Foundry?

从Spring Tool Suite(STS)将“hello world”Spring应用程序部署到Cloud Foundry的过程

借助自动缩放功能在Cloud Foundry上进行分布式计算