Windows Azure 应用服务出错:请手动安装 sqlite3 包
Error on Windows Azure App Service: Please install sqlite3 package manually
我 运行 遇到障碍,试图让我的 Web 应用程序在 Windows Azure 应用程序服务上 运行。
我的应用程序有一个用 TypeScript 编写的 Node.js/Express 后端(使用 tsc,而不是 Webpack 编译)并使用 Sequelize 连接到存储在本地的 SQLite 3 数据库。前端是基于 Create React App 构建的 React 应用程序。
问题是,当 sequelize 尝试要求 sqlite3 时,出现 MODULE_NOT_FOUND 错误,导致 sequelize 抛出“请手动安装 sqlite3 包”。 (请参阅下面的完整堆栈跟踪。)
包含预期文件的 sqlite3 文件夹清楚地存在于 Azure 文件系统的 node_modules 文件夹中,所以我真的不明白 require("sqlite3")
是如何失败的。
这是我到目前为止尝试过的方法:
- 我几乎尝试了 this sequelize issue 中的所有建议。
- 我搜索了 Whosebug,但大多数问题都与我没有使用的 Electron 有关。尽管如此,我还是阅读了其中的大部分内容,并尝试了所有似乎相关的建议。
- 我确保我的开发机器上的节点版本与我的 Azure Window 应用服务 (14.16.0) 上的相同。
- 我尝试使用 Azure 控制台删除 node_modules 文件夹和 运行ning
npm install --production
。
- 我从 Azure 控制台尝试 运行ning
npm rebuild
。
- 我从 Azure 控制台尝试 运行ning
npm cache verify
。
- 我尝试使用
npm install -g sqlite3
从 Azure 控制台全局安装 sqlite3,但 Azure 禁止该操作。
- 我尝试使用
npm install sqlite3 --build-from-source
. 从源代码安装 sqlite3
- 我在 node_modules/sequelize/lib/dialects/abstract/connection-manager.js 中添加了控制台日志语句,以验证传递给 require 语句的模块名称是
"sqlite3"
,它是。
- 我尝试用实际字符串
"sqlite3"
替换 moduleName
。
- 我检查以确保我的应用服务文件列表中的所有 sqlite3 文件都与我的开发机器上安装的文件相匹配。
- 我可能尝试了很多我现在不记得的其他事情!
不用说,none 这些东西产生了任何影响。每次我检查日志时,错误都是一样的(我检查了时间戳以确保日志系统确实在工作。)
这是完整的堆栈跟踪:
Error: Please install sqlite3 package manually
- at ConnectionManager._loadDialectModule (C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:84:23)
- at new ConnectionManager (C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\sqlite\connection-manager.js:24:21)
- at new SqliteDialect (C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\sqlite\index.js:15:30)
- at new Sequelize (C:\home\site\wwwroot\node_modules\sequelize\lib\sequelize.js:340:20)
- at new Sequelize (C:\home\site\wwwroot\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize.js:16:9)
- at getSequelize (C:\home\site\wwwroot\getDatabaseInfo.js:33:16)
- at Object.getDatabaseInfo [as default] (C:\home\site\wwwroot\getDatabaseInfo.js:15:23)
- at Object. (C:\home\site\wwwroot\server.js:55:47)
- at Module._compile (internal/modules/cjs/loader.js:1063:30)
- at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
- at Module.load (internal/modules/cjs/loader.js:928:32)
- at Function.Module._load (internal/modules/cjs/loader.js:769:14)
- at Module.require (internal/modules/cjs/loader.js:952:19)
- at Module.patchedRequire [as require] (C:\PROGRA~2\SITEEX~1\APPLIC~1F926~1.41\nodejs\node_modules\diagnostic-channel\dist\src\patchRequire.js:15:46)
- at require (internal/modules/cjs/helpers.js:88:18)
- at Object. (C:\Program Files (x86)\iisnode\interceptor.js:459:1)
我还能尝试什么?
这不是一个非常令人满意的答案,但我尝试创建一个全新的 Windows Azure App Service 并部署到它,但问题没有发生。
我猜这意味着原始应用服务正在缓存某些内容或已以某种方式损坏,但我不确定。
下一步是看看我是否能找到一种方法将损坏的应用服务恢复到其原始默认状态,重新部署到它,看看它是否有效。
编辑 参见。
我 运行 遇到障碍,试图让我的 Web 应用程序在 Windows Azure 应用程序服务上 运行。
我的应用程序有一个用 TypeScript 编写的 Node.js/Express 后端(使用 tsc,而不是 Webpack 编译)并使用 Sequelize 连接到存储在本地的 SQLite 3 数据库。前端是基于 Create React App 构建的 React 应用程序。
问题是,当 sequelize 尝试要求 sqlite3 时,出现 MODULE_NOT_FOUND 错误,导致 sequelize 抛出“请手动安装 sqlite3 包”。 (请参阅下面的完整堆栈跟踪。)
包含预期文件的 sqlite3 文件夹清楚地存在于 Azure 文件系统的 node_modules 文件夹中,所以我真的不明白 require("sqlite3")
是如何失败的。
这是我到目前为止尝试过的方法:
- 我几乎尝试了 this sequelize issue 中的所有建议。
- 我搜索了 Whosebug,但大多数问题都与我没有使用的 Electron 有关。尽管如此,我还是阅读了其中的大部分内容,并尝试了所有似乎相关的建议。
- 我确保我的开发机器上的节点版本与我的 Azure Window 应用服务 (14.16.0) 上的相同。
- 我尝试使用 Azure 控制台删除 node_modules 文件夹和 运行ning
npm install --production
。 - 我从 Azure 控制台尝试 运行ning
npm rebuild
。 - 我从 Azure 控制台尝试 运行ning
npm cache verify
。 - 我尝试使用
npm install -g sqlite3
从 Azure 控制台全局安装 sqlite3,但 Azure 禁止该操作。 - 我尝试使用
npm install sqlite3 --build-from-source
. 从源代码安装 sqlite3
- 我在 node_modules/sequelize/lib/dialects/abstract/connection-manager.js 中添加了控制台日志语句,以验证传递给 require 语句的模块名称是
"sqlite3"
,它是。 - 我尝试用实际字符串
"sqlite3"
替换moduleName
。 - 我检查以确保我的应用服务文件列表中的所有 sqlite3 文件都与我的开发机器上安装的文件相匹配。
- 我可能尝试了很多我现在不记得的其他事情!
不用说,none 这些东西产生了任何影响。每次我检查日志时,错误都是一样的(我检查了时间戳以确保日志系统确实在工作。)
这是完整的堆栈跟踪:
Error: Please install sqlite3 package manually
- at ConnectionManager._loadDialectModule (C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:84:23)
- at new ConnectionManager (C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\sqlite\connection-manager.js:24:21)
- at new SqliteDialect (C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\sqlite\index.js:15:30)
- at new Sequelize (C:\home\site\wwwroot\node_modules\sequelize\lib\sequelize.js:340:20)
- at new Sequelize (C:\home\site\wwwroot\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize.js:16:9)
- at getSequelize (C:\home\site\wwwroot\getDatabaseInfo.js:33:16)
- at Object.getDatabaseInfo [as default] (C:\home\site\wwwroot\getDatabaseInfo.js:15:23)
- at Object. (C:\home\site\wwwroot\server.js:55:47)
- at Module._compile (internal/modules/cjs/loader.js:1063:30)
- at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
- at Module.load (internal/modules/cjs/loader.js:928:32)
- at Function.Module._load (internal/modules/cjs/loader.js:769:14)
- at Module.require (internal/modules/cjs/loader.js:952:19)
- at Module.patchedRequire [as require] (C:\PROGRA~2\SITEEX~1\APPLIC~1F926~1.41\nodejs\node_modules\diagnostic-channel\dist\src\patchRequire.js:15:46)
- at require (internal/modules/cjs/helpers.js:88:18)
- at Object. (C:\Program Files (x86)\iisnode\interceptor.js:459:1)
我还能尝试什么?
这不是一个非常令人满意的答案,但我尝试创建一个全新的 Windows Azure App Service 并部署到它,但问题没有发生。
我猜这意味着原始应用服务正在缓存某些内容或已以某种方式损坏,但我不确定。
下一步是看看我是否能找到一种方法将损坏的应用服务恢复到其原始默认状态,重新部署到它,看看它是否有效。
编辑 参见