【发布时间】:2017-01-04 03:15:07
【问题描述】:
这是我第一次尝试 Heroku。我能够在 heroku 上“部署成功”,但是在访问我的应用程序时,它显示“应用程序失败”。
我遵循了本指南: https://scotch.io/tutorials/use-mongodb-with-a-node-application-on-heroku
我认为棘手的事情是因为我使用的是 Mongoose,它可能与 URI 的关系不太好。我也在使用 mlab 插件。
这是我的后端设置:
var request = require('request');
var app = express();
var mongoCredentialss = require('/mongo_credentialss.json');
var conn = mongoose.connection;
var path = require('path');
// connect to the database
mongoose.connect('mongodb://' + mongoCredentials.username + ':' + mongoCredentialss.password + '@ds012345.mlab.com:12345/mydatabase-db');
mongoose.Promise = Promise;
app.listen(3000, function() {
console.log('Listening on 3000...');
});
我不太了解 .env,为了让它在本地工作,我只是将我的用户名和密码存储在一个隐藏的 .json 文件中,这要感谢 .gitignore。不过,从指南中,我只是尝试将 URI 作为变量直接嵌入到我的节点文件中,以查看它是否有效。我不太确定“隐藏环境”是如何工作的……
后来当我重新开始时,我也一直遇到 heroku 无法检测到其标准 buildpacks:set heroku/nodejs 的问题
****编辑:
仍然看到一些问题。我拿出了我的“mongo creds”,所以我的 server.js 文件现在看起来像这样:
var express = require('express');
var mongoose = require('mongoose');
mongoose.connect(process.env.MONGODB_URI);
var Promise = require('bluebird');
var bodyParser = require('body-parser');
var randtoken = require('rand-token');
var cors = require('cors');
var request = require('request');
var app = express();
var conn = mongoose.connection;
var fs = require('fs');
var path = require('path');
app.listen(3000, function() {
console.log('Our app is running on http://localhost:' + 3000);
});
一些进一步的背景:我有一个主项目文件夹,其中包含 2 个子文件夹:后端和前端。当我将它部署到 heroku 时,我将目录更改为主文件夹以部署所有内容。
另外,如果有帮助,我的 package.json 如下所示:
"dependencies": {
"bluebird": "^3.4.1",
"body-parser": "^1.15.2",
"cors": "^2.7.1",
"express": "^4.14.0",
"mongoose": "^4.5.3",
"my-bcrypt": "^1.0.2",
"rand-token": "^0.2.1",
"request": "^2.74.0"
},
"engines": {
"node": "==6.0.0"
}
}
******编辑2: heroku 日志找不到我的“backend.js”。现在,我有一个主项目文件夹目录,里面有 2 个文件夹:--->backend.js (node) 和 --->frontend.js (angular)
我的 package.json 看起来像这样:
**"main": "frontend.js",**
"scripts": {
**"start": "node backend.js",**
"test": "echo \"Error: no test specified\" && exit 1"
},
我可能误解了 heroku 是如何找到我的主要 .js 文件的。据我了解,'start' 用于节点文件,'main' 文件用于前端文件,如 angular/html 文件。
【问题讨论】:
-
将所有内容从子文件夹移到主文件夹(backend.js、frontend.js、css 文件、html 文件)后,我可以再次确认我可以在本地运行我的应用程序。但是当将 FRESH 部署到新的 heroku 应用程序时,我现在得到以下日志: 2016-08-27T20:45:26.674272+00:00 heroku[web.1]: State changed from crashed to started 2016-08-27T20:45 :28.574699+00:00 heroku[web.1]:使用命令启动进程
node backend.js2016-08-27T20:45:30.818329+00:00 heroku[web.1]:进程以状态 1 退出 -
2016-08-27T20:45:30.753675+00:00 应用程序[web.1]: module.js:341 2016-08-27T20:45:30.753686+00:00 应用程序[web.1] 1]:抛出错误; 2016-08-27T20:45:30.753687+00:00 应用程序 [web.1]: ^ 2016-08-27T20:45:30.753687+00:00 应用程序 [web.1]: 2016-08-27T20:45:30.753692 +00:00 app[web.1]:错误:找不到模块'/app/backend.js' 2016-08-27T20:45:30.753694+00:00 app[web.1]:在 Function.Module._load (module.js:290:25) 2016-08-27T20:45:30.753693+00:00 应用[web.1]:在
-
Function.Module._resolveFilename (module.js:339:15) 2016-08-27T20:45:30.753695+00:00 app[web.1]: 在 Function.Module.runMain (module .js:447:10) 2016-08-27T20:45:30.753696+00:00 app[web.1]: 在启动时 (node.js:148:18) 2016-08-27T20:45:30.753697+00: 00 应用 [web.1]:在 node.js:405:3
标签: node.js mongodb heroku buildpack mlab