node.js - 在Azure中作为应用程序服务运行的node.js应用程序的暂存槽为我提供了EADDRINUSE

标签 node.js mongodb azure ssh azure-deployment-slots

我有一个在 Azure 中作为应用服务运行的 Node.js 应用。它通过 mongoose +tunnel-ssh 连接到 MongoDB。我在不同的地理位置部署了多个应用服务,一切正常。

当我创建临时插槽时,我从临时实例的 ssh 隧道收到以下错误(注意:prod.slot 仍然工作正常):

{"code":"EADDRINUSE", "errno":"EADDRINUSE", "syscall":"listen", "address":"127.0.0.1", "port":27017}

对我来说,临时插槽似乎在同一个虚拟机上运行,​​并尝试使用与生产相同的端口,这就是它无法建立与数据库的连接的原因。这意味着我可能无法扩展应用程序,因为另一个实例也会遇到同样的问题。

如何解决登台和其他实例(缩放时)的问题?

暂存可以使用不同的端口,但如何动态设置它以便它也适用于缩放实例?

最佳答案

根据您的错误消息,您似乎忘记为您的插槽 Web 应用程序配置 MongoDB 的连接字符串。

我们可以在 Set up staging environments in Azure App Service 的指令中找到这句话:

Deployment slots are actually live apps with their own hostnames. App content and configurations elements can be swapped between two deployment slots, including the production slot.

本质上,您可以将插槽视为单独的 Web 应用程序。因此,请仔细检查您的老虎机应用程序中的应用程序配置。

关于node.js - 在Azure中作为应用程序服务运行的node.js应用程序的暂存槽为我提供了EADDRINUSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42576474/

相关文章:

ruby - 如何通过 Ruby 与 Node REPL 交互

Node.js – 事件 js 72 抛出未处理的 'error' 事件

mongodb - 删除 MongoDB 中的重复项

MongoDB - Golang 库

powershell - 将特殊字符作为参数传递给Powershell脚本函数

azure - 经常请求项目的缓存模型

sql-server - 将 XML 传递给 Node 中的存储过程

javascript - MongoDB init-script 未使用 docker-compose 启动

azure - Microsoft Azure 入门 - 本地副本?

node.js - Jenkins 上的 `npm install` 输出