我的Node + Express应用程序在本地部署良好,但是当推送到heroku时不会部署

时间:2018-06-30 12:27:30

标签: node.js express heroku

如果这是基本解决方法,请首先道歉。我是Node + Express的新手,仍在尝试解决一些概念!

我有一个Node + Express应用程序,该应用程序在本地启动,但是当我推送到heroku或运行heroku本地网站时,它退出并显示代码0,并且没有错误代码可供我诊断。

这是我部署到Heroku时日志的特定输出:

2018-06-30T11:58:37.052754+00:00 heroku[web.1]: Starting process with command `npm run build`
2018-06-30T11:58:39.336703+00:00 app[web.1]: 
2018-06-30T11:58:39.336728+00:00 app[web.1]: > bookworm-api@1.0.0 build /app
2018-06-30T11:58:39.336733+00:00 app[web.1]: > npm run clean && npm run build-babel
2018-06-30T11:58:39.336734+00:00 app[web.1]: 
2018-06-30T11:58:39.777160+00:00 app[web.1]: 
2018-06-30T11:58:39.777199+00:00 app[web.1]: > bookworm-api@1.0.0 clean /app
2018-06-30T11:58:39.777201+00:00 app[web.1]: > rm -rf build && mkdir build
2018-06-30T11:58:39.777202+00:00 app[web.1]: 
2018-06-30T11:58:40.305583+00:00 app[web.1]: 
2018-06-30T11:58:40.305603+00:00 app[web.1]: > bookworm-api@1.0.0 build-babel /app
2018-06-30T11:58:40.305605+00:00 app[web.1]: > babel -d ./build ./src -s
2018-06-30T11:58:40.305610+00:00 app[web.1]: 
2018-06-30T11:58:41.146122+00:00 app[web.1]: src/index.js -> build/index.js
2018-06-30T11:58:41.196474+00:00 app[web.1]: src/mailer.js -> build/mailer.js
2018-06-30T11:58:41.242714+00:00 app[web.1]: src/models/Circuit.js -> build/models/Circuit.js
2018-06-30T11:58:41.293304+00:00 app[web.1]: src/models/User.js -> build/models/User.js
2018-06-30T11:58:41.346985+00:00 app[web.1]: src/routes/auth.js -> build/routes/auth.js
2018-06-30T11:58:41.362022+00:00 app[web.1]: src/routes/circuits.js -> build/routes/circuits.js
2018-06-30T11:58:41.380720+00:00 app[web.1]: src/routes/stripe.js -> build/routes/stripe.js
2018-06-30T11:58:41.411474+00:00 app[web.1]: src/routes/users.js -> build/routes/users.js
2018-06-30T11:58:41.423692+00:00 app[web.1]: src/utils/parseErrors.js -> build/utils/parseErrors.js
2018-06-30T11:58:41.508066+00:00 heroku[web.1]: Process exited with status 0
2018-06-30T11:58:41.532442+00:00 heroku[web.1]: State changed from starting to crashed

这是我运行Heroku local web

时的输出
[OKAY] Loaded ENV .env File as KEY=VALUE Format
8:04:38 AM web.1 |  > bookworm-api@1.0.0 build /Users/kylependergast/Desktop/projects/bookworm/bookworm-api
8:04:38 AM web.1 |  > npm run clean && npm run build-babel
8:04:38 AM web.1 |  > bookworm-api@1.0.0 clean /Users/kylependergast/Desktop/projects/bookworm/bookworm-api
8:04:38 AM web.1 |  > rm -rf build && mkdir build
8:04:39 AM web.1 |  > bookworm-api@1.0.0 build-babel /Users/kylependergast/Desktop/projects/bookworm/bookworm-api
8:04:39 AM web.1 |  > babel -d ./build ./src -s
8:04:39 AM web.1 |  src/index.js -> build/index.js
8:04:39 AM web.1 |  src/mailer.js -> build/mailer.js
8:04:39 AM web.1 |  src/models/Circuit.js -> build/models/Circuit.js
8:04:39 AM web.1 |  src/models/User.js -> build/models/User.js
8:04:39 AM web.1 |  src/routes/auth.js -> build/routes/auth.js
8:04:39 AM web.1 |  src/routes/circuits.js -> build/routes/circuits.js
8:04:39 AM web.1 |  src/routes/stripe.js -> build/routes/stripe.js
8:04:39 AM web.1 |  src/routes/users.js -> build/routes/users.js
8:04:39 AM web.1 |  src/utils/parseErrors.js -> build/utils/parseErrors.js
8:04:39 AM web.1 Exited Successfully

这是我的package.json文件:

{
  "name": "bookworm-api",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "test": "nodemon --exec babel-node -- src/index.js",
    "clean": "rm -rf build && mkdir build",
    "build-babel": "babel -d ./build ./src -s",
    "build": "npm run clean && npm run build-babel",
    "start": "npm run build && node ./build/index.js"
  },
  "engines": {
    "node": "9.4.0"
  },
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-eslint": "^8.2.3",
    "babel-preset-env": "^1.7.0",
    "eslint-plugin-jsx-a11y": "^5.1.1",
    "eslint-plugin-prettier": "^2.6.0",
    "nodemon": "^1.17.4"
  },
  "dependencies": {
    "babel-plugin-transform-object-rest-spread": "^6.26.0",
    "bcrypt": "^2.0.1",
    "bluebird": "^3.5.1",
    "body-parser": "^1.18.2",
    "dotenv": "^5.0.1",
    "express": "^4.16.3",
    "jsonwebtoken": "^8.2.1",
    "lodash": "^4.17.10",
    "mongodb": "^3.1.0",
    "mongoose": "^4.11.10",
    "mongoose-unique-validator": "^2.0.1",
    "nodemailer": "^4.6.4",
    "request-promise": "^4.2.2",
    "stripe": "^6.1.1",
    "uuid": "^3.2.1",
    "xml2js": "^0.4.19"
  }
}

这是我的index.js文件:

import express from 'express';
import path from 'path';
import mongoose from 'mongoose';
import bodyParser from 'body-parser';
import dotenv from 'dotenv';
import Promise from 'bluebird';

import auth from './routes/auth';
import users from './routes/users';
import circuits from "./routes/circuits";
import stripe from './routes/stripe';

dotenv.config();
const app = express();
app.use(bodyParser.json());
mongoose.Promise = Promise;
mongoose.connect(
  process.env.MONGODB_URI || process.env.MONGODB_URL_DEV_LOCAL,
  {useMongoClient: true});

app.use('/api/auth', auth);
app.use('/api/users', users);
app.use('/api/circuits', circuits);
app.use('/api/stripe', stripe);

app.post('/api/auth', (req, res) => {
  res.status(400).json({ errors: {global: "Invalid Credentials" } });
});

app.get('/', (req, res) => {
  res.sendFile(path.join(__dirname, 'index.html'));
})

var port = process.env.PORT || 8080

app.listen(port || 8080, function(){
  console.log("App is running on port " + port);
});

这是我的Procfile

web: npm run build

我确定其他人也遇到了这个问题,但是我一直无法找到建议下一步措施的资源。如果您可以指出相关资源或自己提供答案,将不胜感激!

1 个答案:

答案 0 :(得分:1)

您的Procfile似乎已定义为在开始该过程时正在构建东西。构建成功(返回0),但随后该过程停止,Heroku认为这是一种不良情况,导致Web服务器不应停止。

您需要实际在Heroku中运行 Web服务器。类似于web: npm run start


尽管我会分开构建和运行阶段。您应该在本地或在构建机器(或构建服务,例如Travis,Circle等-它们也具有Heroku集成)上进行构建,然后将已编译的内容推送到Heroku。因此Procfile只能是web: node ./build/index.js或类似的东西。