【问题标题】:Error on Windows Azure App Service: Please install sqlite3 package manuallyWindows Azure App Service 上的错误:请手动安装 sqlite3 包
【发布时间】:2021-10-23 04:12:21
【问题描述】:

我在尝试让我的 Web 应用程序在 Windows Azure 应用程序服务上运行时遇到了障碍。

我的应用程序有一个用 TypeScript 编写的 Node.js/Express 后端(使用 tsc,而不是 Webpack 编译),并使用 Sequelize 连接到本地存储的 SQLite 3 数据库。前端是一个基于 Create React App 构建的 React 应用程序。

问题是当 sequelize 尝试 require sqlite3 时,会出现 MODULE_NOT_FOUND 错误,导致 sequelize 抛出“请手动安装 sqlite3 包”。 (请参阅下面的完整堆栈跟踪。)

带有预期文件的 sqlite3 文件夹清楚地存在于 Azure 文件系统的 node_modules 文件夹中,所以我真的不明白 require("sqlite3") 是如何失败的。

这是我迄今为止尝试过的:

  1. 我尝试了this sequelize issue 中的几乎所有建议。
  2. 我搜索了 StackOverflow,但大多数问题都与我没有使用的 Electron 有关。尽管如此,我还是阅读了其中的大部分内容,并尝试了任何似乎相关的建议。
  3. 我确保我的开发机器上的节点版本与我的 Azure Window App Service (14.16.0) 上的相同。
  4. 我尝试删除 node_modules 文件夹并使用 Azure 控制台运行 npm install --production
  5. 我尝试从 Azure 控制台运行 npm rebuild
  6. 我尝试从 Azure 控制台运行 npm cache verify
  7. 我尝试从 Azure 控制台使用 npm install -g sqlite3 全局安装 sqlite3,但该操作被 Azure 禁止。
  8. 我尝试使用 npm install sqlite3 --build-from-source 从源安装 sqlite3。
  9. 我在 node_modules/sequelize/lib/dialects/abstract/connection-manager.js 中添加了控制台日志语句,以验证传递给 require 语句的模块名称是 "sqlite3",并且确实如此。
  10. 我尝试将moduleName 替换为实际字符串"sqlite3"
  11. 我检查以确保我的应用服务文件列表中的所有 sqlite3 文件都与我的开发计算机上安装的文件相匹配。
  12. 我可能尝试了很多其他我现在不记得的事情!

不用说,这些事情都没有任何区别。每次我检查日志时,错误都是一样的(我检查了时间戳以确保日志记录系统确实在工作。)

这是完整的堆栈跟踪:

错误:请手动安装 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 [根据需要] (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)

我还能尝试什么?

【问题讨论】:

    标签: node.js azure sqlite sequelize.js azure-web-app-service


    【解决方案1】:

    这不是一个非常令人满意的答案,但我尝试创建一个全新的 Windows Azure App Service 并部署到它,但问题没有发生。

    我猜这意味着原始应用服务要么正在缓存某些东西,要么已经以某种方式损坏,但我不确定。

    下一步将看看我是否能找到一种方法将损坏的应用服务恢复到其原始默认状态,重新部署到它,看看它是否有效。

    编辑this question

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 2014-11-15
      • 2019-11-17
      • 2018-09-09
      • 2020-01-29
      • 2019-11-18
      • 2018-11-09
      • 1970-01-01
      • 2020-09-10
      相关资源
      最近更新 更多