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

时间:2016-09-05 02:03:27

标签: node.js mongodb heroku mongoose

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

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

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

和另一个来自scotch.io“在Heroku上使用带有Node.js应用程序的MongoDB”

我没有从那些无关紧要的文章中做到:在tilcode中,它表示使用github生成SSH密钥...而是使用我的mac和终端命令使用一些指南。 / p>

总结我的步骤:

  1. 登录heroku,创建应用
  2. 使用git命令添加,将我的github中的所有文件提交到heroku并将它们推送到heroku
  3. 我甚至放了mlab插件并填写了URI。
  4. 它已“成功”部署,但在访问该应用时,它显示“应用程序失败”
  5. 我的怀疑:

    1. 我确实有另一个使用postgreSQL的工作应用程序...但我把它放在'维护模式',因为我的免费帐户只允许一个活跃的发电机。

    2. 我没有上传所有节点模块,而是学会了我可以像这样安装heroku: heroku config:设置NPM_CONFIG_PRODUCTION = false

    3. 我认为这可能是我从前端javascript引用后端的方式。

    4. // 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);
            }
          });
        };
      });

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

      2016-09-05T01:35:27.417956 + 00:00 app [web.1]:npm ERR! Linux 3.13.0-93-generic

      2016-09-05T01:35:27.418339 + 00:00 app [web.1]:npm ERR! argv“/app/.heroku/node/bin/node”“/ app / .heroku / node / bin / npm”“start”

      2016-09-05T01:35:27.418593 + 00:00 app [web.1]:npm ERR!节点v5.11.1

      2016-09-05T01:35:27.418931 + 00:00 app [web.1]:npm ERR! npm v3.8.6

      2016-09-05T01:35:27.419219 + 00:00 app [web.1]:npm ERR!代码ELIFECYCLE

      2016-09-05T01:35:27.419386 + 00:00 app [web.1]:npm ERR! hallocam@1.0.0开始: node backend.js

      2016-09-05T01:35:37.178679 + 00:00 heroku [router]:at = error code = H10 desc =“App crashed”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 bytes =

      ****** Yashua评论后编辑**

      访问该应用时,我现在收到“无法获取”消息。有点犹豫是否将我的heroku变量限制为:     NODE_ENV =生产

      但我想这是因为如果我使用.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的目的是用于我的角度工厂:

      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
            });
          },

      New Heroku logs --tail

      2016-09-05T15:42:52.796464 + 00:00 heroku [router]: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 connect = 1ms service = 18ms status = 404 bytes = 243

      2016-09-05T15:42:53.893156 + 00:00 heroku [router]: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 connect = 1ms service = 8ms status = 404 bytes = 243

      2016-09-05T15:42:54.602312 + 00:00 heroku [router]: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 connect = 1ms service = 3ms status = 404 bytes = 243

2 个答案:

答案 0 :(得分:0)

很难分辨,但这里有一些指示:

我看了你的回购,你的package.json在2个地方无效。使用JSON validator

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

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

Heroku上你需要的唯一变量是NODE_CONFIG设置为生产。

答案 1 :(得分:0)

我正在关闭这个帖子,因为它变得非常冗长并且出现了一个单独的问题。正如@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