当前位置: 首页 > 知识库问答 >
问题:

在Google App Engine上连接Mongoose

后学
2023-03-14

我已经成功地在Google app engine引擎上部署了一个自定义Node.js应用程序。然而,我在启动应用程序时遇到了问题,因为猫鼬在尝试连接时超时了。令人沮丧的是,猫鼬在我的本地机器上连接得很好,参数完全相同。

我的MongoDb URI的形式如下:

 mongodb://<dbuser>:<dbpassword>@xxxx.mlab.com:<portNumber>/d‌​b-name

因此,我的问题是,当试图连接到上面的URI时,我的App Engine实例和我的本地计算机之间有什么不同?我选择mlab在GCP上托管它的事实有关系吗?如果我选择将它托管在Amazon AWS上,会有什么不同吗?问题的根本原因到底是什么?

以下是我发现的类似问题,以供参考:

>

  • 在app engine上部署时,我可以从本地主机连接到google cloud部署的mongoDB,但不能从相同的应用程序连接到mongoDB

    在google app engine上部署应用程序后,无法连接到mongodb

    此外,如果有帮助的话,mongodb被用作业务模型的db、应用程序的Express会话的数据存储以及存储来自Socket.io的临时数据。

    部署后来自App Engine的stacktrace错误:

    2017-10-18 02:13:46 default[20171017t215757]  npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
    2017-10-18 02:13:46 default[20171017t215757]  npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
    2017-10-18 02:13:46 default[20171017t215757]  npm ERR! enoent This is most likely not a problem with npm itself
    2017-10-18 02:13:46 default[20171017t215757]  npm ERR! enoent and is related to npm not being able to find a file.
    2017-10-18 02:13:46 default[20171017t215757]  npm ERR! enoent
    2017-10-18 02:13:46 default[20171017t215757]
    2017-10-18 02:13:46 default[20171017t215757]  npm ERR! Please include the following file with any support request:
    2017-10-18 02:13:46 default[20171017t215757]  npm ERR!     /app/npm-debug.log
    2017-10-18 02:23:41 default[20171017t215757]  npm ERR! Linux 3.16.0-4-amd64
    2017-10-18 02:23:41 default[20171017t215757]  npm ERR! argv "/nodejs/bin/node" "/nodejs/bin/npm" "start"
    2017-10-18 02:23:41 default[20171017t215757]  npm ERR! node v6.11.3
    2017-10-18 02:23:41 default[20171017t215757]  npm ERR! npm  v3.10.10
    2017-10-18 02:23:41 default[20171017t215757]  npm ERR! path /app/package.json
    2017-10-18 02:23:41 default[20171017t215757]  npm ERR! code ENOENT
    2017-10-18 02:23:41 default[20171017t215757]  npm ERR! errno -2
    2017-10-18 02:23:41 default[20171017t215757]  npm ERR! syscall open
    
    /home/myuser/src/project-id/teammate-express-server/node_modules/mongodb/lib/mongo_client.js:421
              throw err
              ^
    MongoError: failed to connect to server [ds147454.mlab.com:47454] on first connect [MongoError: connection 1 to ds147454.mlab.com:47454 timed out]
        at Pool.<anonymous> (/home/myuser/src/project-id/teammate-express-server/node_modules/mongodb-core/lib/topologies/server.js:336:35)
        at emitOne (events.js:96:13)
        at Pool.emit (events.js:188:7)
        at Connection.<anonymous> (/home/myuser/src/project-id/teammate-express-server/node_modules/mongodb-core/lib/connection/pool.js:280:12)
        at Connection.g (events.js:292:16)
        at emitTwo (events.js:106:13)
        at Connection.emit (events.js:191:7)
        at Socket.<anonymous> (/home/myuser/src/project-id/teammate-express-server/node_modules/mongodb-core/lib/connection/connection.js:197:10)
        at Socket.g (events.js:292:16)
        at emitNone (events.js:86:13)
        at Socket.emit (events.js:185:7)
        at Socket._onTimeout (net.js:338:8)
        at ontimeout (timers.js:386:14)
        at tryOnTimeout (timers.js:250:5)
        at Timer.listOnTimeout (timers.js:214:5)
    
  • 共有1个答案

    微生欣怡
    2023-03-14

    Google App Engine是一个完全管理的平台。从某种意义上说,它是无服务器的,您正在利用一个员工池来向上/向下扩展您的应用程序。当一个请求进入您的应用程序时,池中的一个实例将处理该任务/请求。

    您可能还会发现Google App Engine常见问题很有用。

    我选择mlab在GCP上托管它的事实有关系吗?

    不是很多。正如您所提到的,您目前正在使用GCP进行沙箱(免费)计划。目前,这将在US-Central1区域部署MongoDB实例,并且没有其他区域选择。不同云计算提供商之间的RAM/存储/价格也略有差异。

    问题的根本原因到底是什么?

    如果没有正确的堆栈跟踪或描述超时问题的错误日志,很难确定问题是什么。

    通常node.js项目包含一个名为config.js的JavaScript文件,它有下面一行:

      nconf.argv()
           .env()
           .file({ file: path.join(__dirname, 'config.json') })
           .defaults()
    

    它基本上试图按照以下顺序读取配置:

    • 命令行参数
    • 环境变量
    • 配置文件(指定路径)
    • 默认值

    另见谷歌云平台:NodeJS-入门

    另以GoogleLoudPlatform/nodejs-docs-samples/AppEngine/MongoDB项目为例。

     类似资料:
    • 问题内容: 我观察到有两种方法可以在多个表上实现目标。结果集中的一列将被更新,并且可能需要速度。结果集可以通过以下方式获得: 情况1: 或者 情况2: 两者给出的结果相同,只是连接条件有所不同。哪个运行/执行速度更快? eval_id为,report_type和course_name为。 对于所使用的开发人员,情况1具有以下统计信息:[SELECT-3077行,0.048秒]提取了结果集…执行了1

    • 我是相当新的和。我使用的是Mac OS Sierra预装的Apache和PHP副本。我已经下载并配置了(工作完全正常,能够使用等等)。但是,我一直在努力从连接到数据库。我有这个代码: 我已将其保存为文件,但当我尝试从浏览器打开文件时,不断出现此错误: 警告:mysqli_connect():(HY000/2002):第6行 /Users/Mahfouz/Sites/connect_prac.php

    • 在一个简单的客户端-服务器TCP套接字中,当我试图在Android Studio中创建客户端套接字时,遇到了一个问题。导致错误的指令是<code>Sockets=new Socket(主机名,端口) 我使用的端口是 1993,我尝试了变量的一些值: 在每种情况下,应用程序都会因为这个错误而停止,下面的错误属于第一点,其他的得到类似的错误。 Eclipse中的相同指令工作,我在命令行上使用服务器“n

    • 我正在尝试将一个基于PHP的API从共享主机移植到Google应用程序引擎。我下载了PHPSDK,在启动器中创建了一个新的应用程序,在PHP中启用了cURL。ini(使用),现在我得到这个错误: 如果我向curl_init()添加反斜杠(告诉它不要使用MyNamespace),我会得到这个: 除了启用cURL_lite()(稍后我可能会解决这个问题,因为它不支持我需要的cURL选项),我如何解决这

    • 用法同WebSocket 服务器 - 会话数据

    • imi 中 WebSocket 服务中使用 Imi\ConnectContext 类对连接的会话数据进行管理。在整个连接的生命周期中都有效。 使用 use Imi\ConnectContext; // 取值 echo ConnectContext::get('name'); echo ConnectContext::get('name', 'default value'); // 赋值 Con