2017-03-03 265 views
1

我有一个node.js应用程序在Azure中作为App Service运行。它通过mongoose + tunnel-ssh连接到MongoDB。我有多个应用程序服务部署在各种地理位置,一切正常。作为App Service运行在Azure中的node.js应用程序的临时插槽为我提供了EADDRINUSE

当我创建我获得以下从SSH隧道为分期例如错误的暂存插槽(注:PROD插槽仍然正常工作):

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

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

我该如何解决这个问题,用于分段和其他实例(缩放时)?

分期可以使用不同的端口,但如何动态地设置它,所以它也将努力调整后的情况?

回答

0

根据您的错误信息,看来你忘记配置MongoDB的连接字符串为您的插槽的Web App应用程序。

我们可以在Set up staging environments in Azure App Service找到在指令了一句:

部署插槽的实际生活应用与自己的主机名。应用内容和配置元素可以在两个部署插槽(包括生产插槽)之间交换。

从本质上讲,你可以把插槽为独立的Web应用程序。因此,请仔细检查您的应用程序中的应用程序配置。

+0

我做了更多的挖掘 - 我已经隔离了我的网络应用程序,除了我之外没有人能够访问它。我已经重新启动了prod和stg插槽,并且我以相同的情况结束了 - prod能够通过SSH连接到数据库,而不是stg。当我停止刺激时,stg突然间能够连接,但是在启用刺激之后,整个问题都在这个插槽中移动。在我看来,只有一个插槽可以创建和使用ssh隧道(使用端口)。 – Michal

+0

您正在使用哪种mongodb服务?因为它让我困惑,你的错误信息显示为“address”:“127.0.0.1”。目前,您可以为您的插槽启用mongodb的不同端口,并为mongodb连接字符串在不同的插槽中设置不同的应用程序设置,作为解决方法。 –

+0

它是从Azure托管的Bitnami进行复制的MongoDB。地址是localhost,因为我创建了一个ssh隧道,将流量转发到托管Mongo的虚拟机的公共IP。配置应该可以,因为它适用于一个插槽。问题是第二个不能建立连接。 – Michal

相关问题