我有一个nestjs monorepo(微服务)项目,结构如下
Project
| .git
| package.json
|
|____app 1
|
|____app 2
Git会将整个项目推送到Heroku服务器上,我的想法是根据环境变量构建并启动每个应用程序。
我的尝试是,在Heroku app1中,我已经配置了环境变量MSERVICE
= APP1
,在我的package.json中,启动脚本是"start": "if [[ $MSERVICE == APP1 ]];then node dist/apps/app1/main;else node dist/apps/app2/main;fi"
,它在我的Macbook中工作得很好。
然而,Heroku在启动时抛出错误:
> project@0.0.1 start
> if [[ $MSERVICE == WEB ]];then node dist/apps/web/main;else node dist/apps/admin-web/main;fi
/tmp/start-a3a234c5.sh: 1: [[: not found
node:internal/modules/cjs/loader:959
throw err;
^
我试过将此启动脚本放到一个start.sh
中,并得到相同的结果。
看起来Heroku无法识别这里的bash if条件语法。这里有什么我遗漏的地方或者其他解决方案吗?
1条答案
按热度按时间wsxa1bj11#
做了一些头脑风暴,我发现答案其实很简单。使用bash命令
eval
就像一种魅力。首先,在
package.json
中编辑生成和启动脚本,使其其次,将环境变量添加到Heroku app 1中,位置为
Settings -> Config Vars
、BUILD: APP_1_NAME
、MSERVICE: dist/apps/APP_1_NAME/main
第三步,像第二步一样设置其他Heroku微服务应用程序env变量。
这些步骤可以帮助你实现,推送一个git提交,并相应地部署Heroku上的所有微服务应用。