我在嘗試讓我的 Web 應用程式在 Windows Azure 應用服務上運行時遇到了障礙。
我的應用程式有一個用 TypeScript(用 tsc 編譯,而不是 Webpack 編譯)撰寫的 Node.js/Express 后端,并使用 Sequelize 連接到本地存盤的 SQLite 3 資料庫。前端是一個基于 Create React App 構建的 React 應用程式。
問題是當sequelize 嘗試需要sqlite3 時,會發生MODULE_NOT_FOUND 錯誤,導致sequelize 拋出“請手動安裝sqlite3 包”。(請參閱下面的完整堆疊跟蹤。)
帶有預期檔案的 sqlite3 檔案夾明顯存在于 Azure 檔案系統的 node_modules 檔案夾中,所以我真的不明白怎么require("sqlite3")會失敗。
這是我迄今為止嘗試過的:
- 我嘗試了這個續集問題中的幾乎所有建議。
- 我搜索了 StackOverflow,但大多數問題都與 Electron 相關,我沒有使用它。盡管如此,我還是閱讀了其中的大部分內容,并嘗試了任何似乎相關的建議。
- 我確保我的開發機器上的 node 版本與我的 Azure Window App Service (14.16.0) 上的相同。
- 我嘗試洗掉 node_modules 檔案夾并
npm install --production使用 Azure 控制臺運行。 - 我嘗試
npm rebuild從 Azure 控制臺運行。 - 我嘗試
npm cache verify從 Azure 控制臺運行。 - 我嘗試
npm install -g sqlite3從 Azure 控制臺使用全域安裝 sqlite3 ,但該操作被 Azure 禁止。 - 我嘗試使用
npm install sqlite3 --build-from-source. - 我將控制臺日志陳述句添加到 node_modules/sequelize/lib/dialects/abstract/connection-manager.js 以驗證傳遞給 require 陳述句的模塊名稱是
"sqlite3",并且確實是。 - 我嘗試用
moduleName實際的字串替換"sqlite3". - 我檢查以確保我的應用服務檔案串列中的所有 sqlite3 檔案與我的開發機器上安裝的檔案相匹配。
- 我可能嘗試了很多我現在不記得的其他事情!
不用說,這些事情都沒有任何區別。每次我檢查日志時,錯誤都是一樣的(我檢查了時間戳以確保日志系統確實在作業。)
這是完整的堆疊跟蹤:
錯誤:請手動安裝 sqlite3 包
- 在 ConnectionManager._loadDialectModule (C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:84:23)
- 在新的 ConnectionManager (C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\sqlite\connection-manager.js:24:21)
- 在新的 SqliteDialect (C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\sqlite\index.js:15:30)
- 在新的 Sequelize (C:\home\site\wwwroot\node_modules\sequelize\lib\sequelize.js:340:20)
- 在新的 Sequelize (C:\home\site\wwwroot\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize.js:16:9)
- 在 getSequelize (C:\home\site\wwwroot\getDatabaseInfo.js:33:16)
- 在 Object.getDatabaseInfo [作為默認值] (C:\home\site\wwwroot\getDatabaseInfo.js:15:23)
- 在物件。(C:\home\site\wwwroot\server.js:55:47)
- 在 Module._compile (internal/modules/cjs/loader.js:1063:30)
- 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
- 在 Module.load (internal/modules/cjs/loader.js:928:32)
- 在 Function.Module._load (internal/modules/cjs/loader.js:769:14)
- 在 Module.require (internal/modules/cjs/loader.js:952:19)
- 在 Module.patchedRequire [as require] (C:\PROGRA~2\SITEEX~1\APPLIC~1\28F926~1.41\nodejs\node_modules\diagnostic-channel\dist\src\patchRequire.js:15:46)
- 在要求 (internal/modules/cjs/helpers.js:88:18)
- 在物件。(C:\Program Files (x86)\iisnode\interceptor.js:459:1)
我還能嘗試什么?
uj5u.com熱心網友回復:
這不是一個非常令人滿意的答案,但我嘗試創建一個全新的 Windows Azure 應用服務并部署到它,但沒有出現問題。
我猜這意味著原始應用服務要么快取了某些東西,要么以某種方式損壞了,但我不確定。
下一步將是看看我是否能找到一種方法將損壞的應用服務恢復到其原始默認狀態,重新部署到它,看看它是否有效。
編輯看到這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/341409.html
