我有一個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 在啟動時會拋出錯誤:
> [email protected] 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 條件語法。我在這里錯過了什么或任何其他解決方案嗎?
uj5u.com熱心網友回復:
做了一些頭腦風暴,我發現答案其實很簡單。使用 bash 命令eval就像一個魅力。
package.json首先,在to中編輯構建和啟動腳本
"build": "eval nest build $BUILD",
"start": "eval node $MSERVICE",
二、將環境變數添加到Heroku app 1, in Settings -> Config Vars,
BUILD: APP_1_NAME,MSERVICE: dist/apps/APP_1_NAME/main
第三,像第二步一樣設定其他 Heroku 微服務應用程式環境變數。
這些步驟可以幫助您實作、推送一個 git 提交并相應地在 Heroku 上部署所有微服務應用程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/503973.html
