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

MongoDB没有连接到Heroku?应用程序错误

姬乐
2023-03-14

我使用npm模块进行了测试:backend.js上的“node-dev”和文件夹根目录上的“serve”。

我有两个指南试图帮助我:

http://www.tilcode.com/deploying-a-mean-stack-app-to-heroku/

和另一个来自Scotch.io的“在Heroku上使用MongoDB和node.js应用程序”

我在文章中没有做的不应该很重要:在tilcode中,它说使用github生成一个SSH密钥...相反,我用我的mac做了一个,用一些指南做了一个终端命令。

总结一下我的步骤:

  1. 登录到heroku,创建应用程序
  2. 使用git命令将github中的所有文件添加、提交到heroku中,并将其推送到heroku
  3. 我甚至添加了mlab插件并填写了URI。
  4. 它部署“成功”,但访问应用程序时,它说“应用html" target="_blank">程序失败”

我的怀疑:

>

  • 我有另一个使用PostgreSQL的应用程序...但是我把它放在了“维护模式”,因为我的免费帐户只允许一个活动的发电机。

    我不是上传所有节点模块,而是让heroku像这样安装它:heroku config:set npm_config_production=false

    我想这可能是我如何从前端JavaScript引用后端的。

    null

    // var API = 'http://localhost:5000';
    
    var API = 'http://limitless-falls-21423.herokuapp.com';
    
    var app = angular.module('HAL-app', ['ngRoute', 'ngCookies']);
    
    // Some other stuff that came from sandbox app.js
    
    app.directive('whenScrolled', function() {
      return function(scope, elm, attr) {
        var raw = elm[0];
        elm.bind('scroll', function() {
          if (raw.scrollTop + raw.offsetHeight >= raw.scrollHeight) {
            scope.$apply(attr.whenScrolled);
          }
        });
      };
    });

    null

    最后,当我运行heroku logs-tail时,我得到了以下消息:

    2016-09-05T01:35:27.417956+00:00APP[Web1]:npm错误!Linux 3.13.0-93-通用

    2016-09-05T01:35:27.418339+00:00APP[Web1]:npm错误!argv“/app/.heroku/node/bin/node”“/app/.heroku/node/bin/npm”“start”

    2016-09-05T01:35:27.418593+00:00APP[Web1]:npm错误!节点V5.11.1

    2016-09-05T01:35:27.418931+00:00APP[Web1]:npm错误!npm v3.8.6

    2016-09-05T01:35:27.419219+00:00APP[Web1]:npm错误!代码ELIFECYCLE

    2016-09-05T01:35:27.419386+00:00APP[Web1]:npm错误!HalloCam@1.0.0 start:节点backend.js

    2016-09-05T01:35:37.178679+00:00 Heroku[router]:at=error code=h10 desc=“App已崩溃”method=get path=“/”host=Limitless-Falls-21423.herokuapp.com request_id=4bc9639f-3f64-4c0b-9b0d-d99b967f1b36 fwd=“73.54.129.252”dyno=connect=service=status=503字节=

    ******在雅舒亚评论后编辑**

    我现在在访问该应用程序时会收到一条“无法获取”的消息。我对将heroku变量限制为:node_env=production有点犹豫不决

    但我想如果我使用.gitignore将mongodb(mongo labs)的凭据上传并隐藏起来,就会发生这样的情况。

    无论如何,我仍然认为这不是“获取”我的路由,我设置了我的angularjs文件,如下所示:

    // var API = 'http://localhost:5000';  ##this is the old way to connect my front end factory routes to the backend hosted on 5000
    

    我现在就像这样

    var API = 'http://obscure-brook-35938.herokuapp.com/';
    

    我想可能得长这样:

    var API = process.env.PORT 
    

    API的目的是用于我的棱角分明的工厂,像这样:

    null

    app.factory('backEnd', function($http) {
      return {
        getSignUp: function(data) {
          return $http({
            method: 'POST',
            url: API + '/signup',
            data: data
          });
        },
        getLogin: function(data) {
          return $http({
            method: 'POST',
            url: API + '/login',
            data: data
          });
        },

    null

    新的Heroku日志--尾部

    2016-09-05T15:42:52.796464+00:00 Heroku[路由器]:at=info method=get path=“/”host=obscure-brook-35938.herokuapp.com request_id=41fa32e2-42cc-426d-a0d0-ef6755329497 fwd=“73.54.129.252”dyno=web.1连接=1ms服务=18ms状态=404字节=243

    2016-09-05T15:42:53.893156+00:00 Heroku[路由器]:at=info method=get path=“/”host=obscure-brook-35938.herokuapp.com request_id=dec235fd-6d54-42e6-b0cc-2f83920d500d fwd=“73.54.129.252”dyno=web.1连接=1ms服务=8ms状态=404字节=243

    2016-09-05T15:42:54.602312+00:00 Heroku[路由器]:at=info method=get path=“/”host=obscure-brook-35938.herokuapp.com request_id=8ceb054b-78e9-49b8-bdee-286ca6efcb0d fwd=“73.54.129.252”dyno=web.1连接=1ms服务=3ms状态=404字节=243

  • 共有2个答案

    黄鸣
    2023-03-14

    我关闭了这个线程,因为它变得相当长,并且出现了一个单独的问题。正如@Yashua所说,解决这个MongoDB/Heroku问题最好的办法就是一步一个脚印。我从这次经历中学到了一些工具:

    • 如果使用NPM进行测试,这是很好的,因为它可以建立信心。但是要真正测试heroku,首先使用它的'heroku local'或'heroku local web‘在本地测试它(服务它),然后在部署/'git push heroku master'
    • 时,这将有助于缩小进一步的问题
    • 建立对.env文件如何工作的坚实理解(实际上,它们只是存储凭据信息的配置文件)。我一直使用.json文件来存储我的文件,然后使用.gitignore来阻止它们公开出现。Heroku有自己的秘密守护者,形式是Procfile和.env

    我现在已经把我的后端/前端合并到一个根目录中了。但是我的前端和后端使用2个不同的端口来工作,而它应该只使用一个。我不知道最好的方法是什么,因为当我用“process.env.mongolab_uri”一样的端口向它们提供时,我得到了一个错误,提示我错了。

    2016-09-05T23:36:51.802697+00:00 app[web.1]: /app/node_modules/mongodb/lib/server.js:261
    2016-09-05T23:36:51.802698+00:00 app[web.1]:         process.nextTick(function() { throw err; })
    2016-09-05T23:36:51.802698+00:00 app[web.1]:                                       ^
    2016-09-05T23:36:51.803862+00:00 app[web.1]: MongoError: failed to connect to server [#:27017] on first connect
    2016-09-05T23:36:51.803864+00:00 app[web.1]:     at Pool.<anonymous> (/app/node_modules/mongodb-core/lib/topologies/server.js:313:35)
    2016-09-05T23:36:51.803864+00:00 app[web.1]:     at emitOne (events.js:96:13)
    2016-09-05T23:36:51.803865+00:00 app[web.1]:     at Pool.emit (events.js:188:7)
    2016-09-05T23:36:51.803865+00:00 app[web.1]:     at Connection.<anonymous> (/app/node_modules/mongodb-core/lib/connection/pool.js:260:12)
    2016-09-05T23:36:51.803866+00:00 app[web.1]:     at Connection.g (events.js:286:16)
    2016-09-05T23:36:51.803867+00:00 app[web.1]:     at emitTwo (events.js:106:13)
    2016-09-05T23:36:51.803867+00:00 app[web.1]:     at Connection.emit (events.js:191:7)
    2016-09-05T23:36:51.803868+00:00 app[web.1]:     at Socket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:162:49)
    2016-09-05T23:36:51.803868+00:00 app[web.1]:     at Socket.g (events.js:286:16)
    2016-09-05T23:36:51.803869+00:00 app[web.1]:     at emitOne (events.js:96:13)
    2016-09-05T23:36:51.803870+00:00 app[web.1]:     at Socket.emit (events.js:188:7)
    2016-09-05T23:36:51.803870+00:00 app[web.1]:     at connectErrorNT (net.js:1016:8)
    2016-09-05T23:36:51.803871+00:00 app[web.1]:     at _combinedTickCallback (internal/process/next_tick.js:74:11)
    2016-09-05T23:36:51.803871+00:00 app[web.1]:     at process._tickCallback (internal/process/next_tick.js:98:9)
    2016-09-05T23:36:51.881752+00:00 heroku[web.1]: State changed from starting to crashed
    2016-09-05T23:36:51.867426+00:00 heroku[web.1]: Process exited with status 1
    
    刘胜泫
    2023-03-14

    很难马上说出来,但这里有一些建议:

    我查看了您的回购,您的package.json在两个地方无效。使用JSON验证器。

    其次,您的前端应用程序将不会是一个问题。您应该能够直接转到服务器URL而不会使其崩溃。

    如果还没有更改数据库密码,请更改。我看到您删除了mongo_creds.json文件,但历史记录可以在GitHub上获得。

    在Heroku上您应该需要的唯一VAR是node_config设置为production。

     类似资料:
    • 回答这个问题:我是否需要在Heroku上获得SSL支持才能使用SSL在Heroku和Atlas MongoDB Cloud之间建立连接?(TSL/SSL连接是访问Atlas MongoDB Cloud服务的要求)。 我正在尝试连接我的Heroku应用程序,它是在node中编写的。js,到Atlas MongoDB云托管的集群。 我当前的数据库托管在mLab(作为Heroku附加组件),用于通过mo

    • 我的heroku服务器有这个问题 at=错误代码=H14 desc="没有运行Web进程" 我试图逃跑 heroku ps:scale web=1 但收到这个错误 扩展web进程。。。失败!没有像web这样的类型 Heroku ps: restart web.1--app dashboardaudi88重启web.1进程...完成 这是heroku的日志

    • 从。NET应用程序连接到远程MongoDb实例有点困难。 我创建了一个非常简单的控制台应用程序,它基本上是一个冒烟测试,并带回一个项目。如果我在运行MongoDb服务的服务器上运行它,它将与MongoDb进行对话,不会有任何问题。ConnectionString就是。 我已经为服务器上的27017端口创建了一个inboudd规则,甚至完全关闭了防火墙。 Mongo服务器的cfg文件非常基本: 干杯

    • 我刚刚在Heroku中创建了一个新的公关应用程序,添加了GrapheneDB。 null Python 3.6.5 Neo4J-Driver 1.5.3

    • 我有一个问题,我用套接字构建了服务器部分和客户机,没有收到任何错误。当我在浏览器中键入本地地址时,它会在cmd中显示信息,但当我在emulator或mobile中运行Android应用程序时,它不会连接到服务器。 我使用的权限: 服务器代码: Main Activity.java是: 请引导我。