Моё приложение node + express нормально развертывается локально, но не будет развернуто при нажатии на heroku - PullRequest
0 голосов
/ 30 июня 2018

сначала мои извинения, если это базовое решение. Я новичок в 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 голосов
/ 30 июня 2018

Ваш Procfile, кажется, определен так, что вы строите вещи при запуске процесса. Сборка завершается успешно (возвращает 0), но затем процесс останавливается, что Heroku считает плохим состоянием, поскольку веб-серверы не должны останавливаться.

Вам нужно на самом деле запустить веб-сервер в Heroku. Что-то вроде web: npm run start.


Хотя я бы разделил этапы сборки и запуска. Вы должны выполнить сборку локально или на машине сборки (или в сервисе сборки, таком как Travis, Circle и т. Д. - они также имеют интеграции с Heroku), а затем отправить что-то, скомпилированное в Heroku. Так что Procfile может быть только web: node ./build/index.js или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...