問題描述
把NodeJS的ChatBot程式碼部署到App Service環境中,透過VS Code直接部署,顯示部署成功。但是透過URL訪問時候,卻是 :( Application Error 。
問題解答
App Service遇見Application Error,第一步,檢視日誌。
發現啟動時候遇見:
2024-11-12T12:22:40.366223350Z Error: Cannot find module 'dotenv'
2024-11-12T12:40:12.538120729Z Error: Cannot find module 'restify'
2024-11-12T12:48:13.348529900Z Error: Cannot find module 'lodash'
8:21:29 PM lbbotbackendapp01: Starting deployment...8:21:29 PM lbbotbackendapp01: Creating zip package...8:21:30 PM lbbotbackendapp01: Ignoring files from "appService.zipIgnorePattern""node_modules{,/**}"".vscode{,/**}"8:21:31 PM lbbotbackendapp01: Adding 13 files to zip package...
而部署包上傳成功後,App Service並沒有主動執行npm install安裝系統中所需要使用的node modules。
解決辦法有多種:
方式一:修改zipIgnorePattern內容,讓Zip部署包中包含本地可以執行的程式的全部檔案。重新部署!
方式二:直接進入App Service的高階工具Kudu站點(https://<yourappservicename>.scm.chinacloudsites.cn/newui/kududebug), 進入wwwroot目錄,執行 npm install
但是,這種方式有時會遇見許可權不足,無法安裝modules問題, 所以,還是更推薦第一種方式,從本地上傳完整的node modules檔案!
npm ERR! Error: EACCES: permission denied, rename '/home/site/wwwroot/node_modules/eslint-plugin-import' -> '/home/site/wwwroot/node_modules/.eslint-plugin-import-QTkaoisN'
此外,如果完整的NodeJS專案檔案部署到App Service後,專案無法啟動的原因也可能為:
從 Node 14 LTS 開始,容器不會自動使用 PM2 啟動應用。 若要使用 PM2 啟動應用,請將啟動命令設定為 pm2 start <.js-file-or-PM2-file> --no-daemon。
請務必使用 --no-daemon 引數,因為 PM2 需要在前臺執行才能使容器正常工作。
參考資料
為 Azure 應用服務配置 Node.js 應用 : https://docs.azure.cn/zh-cn/app-service/configure-language-nodejs?pivots=platform-linux#configure-nodejs-server
【END】