我有一个在 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/