Простое приложение todo упало на Heroku (локально работает нормально) - PullRequest
0 голосов
/ 25 августа 2018

Я скачал следующий источник, запускаю его локально и работает нормально https://vuejsexamples.com/weekly-todo-list-in-vue-js/

Загрузка (через Github) работает нормально, однако при загрузке страницы появляется сообщение об ошибке приложения.

Heroku дает мне следующую ошибку. Я даже не знаю, как получить доступ к следующему файлу журнала. Кто-нибудь знает?

2018-08-25T20: 14: 40.966872 + 00: 00 приложение [web.1]: npm ERR!
/app/.npm/_logs/2018-08-25T20_14_40_957Z-debug.log 2018-08-25T20: 14: 41.322064 + 00: 00 heroku [роутер]: at = код ошибки = H10 desc = "Приложение упало" method = GET path = "/" host = xxx-app.herokuapp.com request_id = aa2b7d48-198f-4fd1-b83e-70c92fc06ac6 fwd = "84.82.96.205" dyno = connect = service = status = 503 байта = протокол = https

1 Ответ

0 голосов
/ 26 августа 2018

Heroku требует, чтобы вы настроили сервер приложений (HTTP-сервер) для обслуживания статических файлов.weekly-todo-vue этого не делает.

Я могу предложить 3 решения: добавить веб-сервер и изменить процесс сборки, извлечь сборку приложения и развернуть его отдельно с сервером, использовать webpack-dev-serverв качестве сервера на Heroku.

Добавьте сервер и настройте процесс сборки

Переместите сборку в postinstall script

// package.json
scripts: {
  // omited ...
  "postinstall": "yarn run build",
  // omitted...
},

Изменить сценарий start npm

// package.json
scripts: {
  // omited ...
  "start": "node server.js",
  // omitted...
},

Некоторые пакеты следует переместить из devDependencies в зависимостей , поскольку мы собираемся создать приложение на Heroku, и Heroku сделала это впроизводственная среда.Это довольно утомительно, поэтому вы можете переместить devDependencies в зависимости.Но это добавит ненужные депы.в вашу сборку.

Установите зависимость Express.JS:

$ yarn add express

В корне репозитория создайте файл server.js с кодом сервера приложений, который будет обслуживать статические файлы приложения:

const express = require('express');
const app = express();

app.use(express.static(__dirname + '/dist'));

const port = process.env.PORT || 5000;

app.listen(port);

Передайте все изменения и отправьте их в Heroku

$ git push heroku master

Извлеките сборку

Создайте сборку из репозитория:

$ yarn run build

СоздатьНовый репозиторий и скопируйте каталог dist.Не забудьте добавить node_modules/ в .gitignore.

Init new package.json:

$ npm init -y

Добавить скрипт запуска npm;

// package.json
scripts: {
  "start": "node server.js",
  // omitted...
},

Установить ExpressЗависимость .JS:

$ yarn add express

В корне репозитория создайте файл server.js с кодом сервера приложений, который будет обслуживать статические файлы приложения, на том же сервере, что и в предыдущем решении:

const express = require('express');
const app = express();

app.use(express.static(__dirname + '/dist'));

const port = process.env.PORT || 5000;

app.listen(port);

У вас должна быть такая структура проекта:

.
├── dist
│   ├── index.html
│   └── static
│       ├── css
│       │   ├── app.c0fc4ae18c0c95b09c1cb7ceb99d491f.css
│       │   └── app.c0fc4ae18c0c95b09c1cb7ceb99d491f.css.map
│       ├── fonts
│       │   ├── icons.674f50d.eot
│       │   ├── icons.af7ae50.woff2
│       │   ├── icons.b06871f.ttf
│       │   └── icons.fee66e7.woff
│       ├── img
│       │   ├── flags.9c74e17.png
│       │   └── icons.912ec66.svg
│       └── js
│           ├── app.88670f817a4b11e940e6.js
│           ├── app.88670f817a4b11e940e6.js.map
│           ├── manifest.304e67c5c14ed63ee160.js
│           ├── manifest.304e67c5c14ed63ee160.js.map
│           ├── vendor.434b5723496264d2da17.js
│           └── vendor.434b5723496264d2da17.js.mapo
├── package-lock.json
├── package.json
└── server.js

Зафиксируйте код и отправьте его в Heroku.

Используйте webpack-dev-server

Как указано здесь вы можете использовать webpack-dev-server для обслуживания вашего приложения.Но это настоятельно не рекомендуется для производственных приложений.

Добавить конфигурацию сервера разработки webpack в webpack.prod.conf.js:

     // ..omitted
     devtool: config.build.productionSourceMap ? config.build.devtool : false,
  +  devServer: {
  +    disableHostCheck: true,
  +    clientLogLevel: 'warning',
  +    historyApiFallback: true,
  +    hot: false,
  +    host: '0.0.0.0',
  +    port: process.env.PORT || config.dev.port,
  +    open: false,
  +    overlay: false,
  +    publicPath: config.dev.assetsPublicPath,
  +    proxy: config.dev.proxyTable,
  +    quiet: true // necessary for FriendlyErrorsPlugin
  +  },
     output: {
     // ..omitted

Изменить сценарий запуска npm:

// package.json
scripts: {
  // omited ...
  "start": "webpack-dev-server --port $PORT --host 0.0.0.0 --config build/webpack.prod.conf.js",
  // omitted...
},

Некоторые пакеты следует переместить из devDependencies в зависимостей , поскольку мы собираемся создать приложение на Heroku, а Heroku делала это в производственной среде.Это довольно утомительно, поэтому вы можете переместить devDependencies в зависимости.Но это добавит ненужные депы.в вашу сборку.

Передайте изменения и отправьте их в Heroku.

Проблема версии узла / npm с Heroku

Heroku любит строгие спецификации движка в package.json.Я бы порекомендовал вам указать явные версии Node.JS и NPM:

   "engines": {
-    "node": ">= 8.0.0",
-    "npm": ">= 5.0.0"
+    "node": "8.11.4",
+    "npm": "5.6.0"
   },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...