У меня есть мое первое приложение node.js (локально работает нормально), но я не могу развернуть его через heroku (впервые также с heroku). Код ниже. SO не позволяет мне писать столько кода, поэтому я бы просто сказал, что выполнение кода локально, а также в моей сети, не вызывает проблем.
var http = require('http');
var fs = require('fs');
var path = require('path');
http.createServer(function (request, response) {
console.log('request starting for ');
console.log(request);
var filePath = '.' + request.url;
if (filePath == './')
filePath = './index.html';
console.log(filePath);
var extname = path.extname(filePath);
var contentType = 'text/html';
switch (extname) {
case '.js':
contentType = 'text/javascript';
break;
case '.css':
contentType = 'text/css';
break;
}
path.exists(filePath, function(exists) {
if (exists) {
fs.readFile(filePath, function(error, content) {
if (error) {
response.writeHead(500);
response.end();
}
else {
response.writeHead(200, { 'Content-Type': contentType });
response.end(content, 'utf-8');
}
});
}
else {
response.writeHead(404);
response.end();
}
});
}).listen(5000);
console.log('Server running at http://127.0.0.1:5000/');
Есть идеи ?
Ответы:
Heroku динамически назначает вашему приложению порт, поэтому вы не можете установить для порта фиксированный номер. Heroku добавляет порт в env, так что вы можете вытащить его оттуда. Переключите ваш слушать это:
Таким образом, при локальном тестировании он все равно будет прослушивать порт 5000, но он также будет работать на Heroku.
Вы можете ознакомиться с документами Heroku на Node.js здесь .
источник
Ошибка происходит, когда Heroku не удалось связать порт или имя хоста в
server.listen(port, [host], [backlog], [callback])
.Что Heroku требует, это
.listen(process.env.PORT)
или.listen(process.env.PORT, '0.0.0.0')
Таким образом, для поддержки других сред используйте:
источник
Стоит отметить, что если в вашем коде не указан порт, то он не должен быть
web
процессом и, вероятно, должен бытьworker
процессом.Итак, измените ваш
Procfile
на чтение (с указанием вашей конкретной команды):а затем также запустить на CLI:
источник
start
сценарий в мойpackage.json
У меня была такая же проблема при использовании проекта Yeoman's Angular-Fullstack, и удаление параметра IP работало для меня.
Я заменил этот код
с
источник
Для тех, кто проходит через порт и хост, имейте в виду, что Heroku не будет связываться с
localhost
.Вы должны пройти
0.0.0.0
для хоста.Даже если вы используете правильный порт. Мы должны были сделать эту корректировку:
Затем вы можете запустить сервер, как обычно:
Вы можете увидеть более подробную информацию здесь: https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error
источник
const port = 3000;
чтобыconst port = process.env.PORT || 3000;
он работает на HerokuВ моем случае я использовал пример с https://hapijs.com/
Чтобы исправить проблему я заменил
с
источник
process.env.PORT
правильно указав , но оставляя вhost
параметре: вы не можете :) см. здесь: stackoverflow.com/a/34956330/626369Изменение порта прослушивания с 3000 для
(process.env.PORT || 5000)
решения проблемы.источник
В моем случае я использовал Babel с плагином babel-plugin-transform-inline-environment-variable . По-видимому, Heroku не устанавливает переменную PORT env при развертывании, поэтому
process.env.PORT
будет заменен наundefined
, и ваш код откатится к порту разработки, о котором Heroku ничего не знает.источник
Редактировать
package.json
:и
Server.js
:источник
package.json
. Я считаю, что обновление должно также решить эту проблему.У меня была та же самая проблема, потому что я не определял
Procfile
. Зафиксируйте текстовый файл в корневой каталог вашего приложения с именемProcfil
e без расширения файла. Этот файл сообщает Heroku, какие команды нужно запустить для запуска приложения.источник
У меня была та же проблема, я мог решить проблему с заменой «localhost» на IP, который равен «0.0.0.0»
источник
Фиксированный номер не может быть установлен для порта, геройку назначает его динамически, используя
process.env.PORT
. Но вы можете добавить их обоих, вот такprocess.env.PORT || 5000
. Heroku будет использовать первый, а ваш локальный хост будет использовать второй.Вы даже можете добавить функцию обратного вызова. Посмотрите на код ниже
источник
Из всех решений, которые я пробовал, никто не работал должным образом, я изучаю heroku по умолчанию. Файл .env должен поддерживать соглашение PORT, process.env.PORT, heroku по умолчанию будет искать ключевое слово PORT.
Отмените любое переименование, например APP_PORT =, вместо этого используйте PORT = в файле env.
источник
Из процесса heroku bash передайте значение $ PORT вашему приложению-ноду, используя анализатор параметров, например yargs.
Вот пример того, как вы можете это сделать. В объекте scripts внутри package.json добавьте метод запуска "node server --port $ PORT".
В файле вашего сервера используйте yargs, чтобы получить значение из опции порта (--port $ PORT) метода start:
Теперь, когда ваше приложение запускается, оно будет привязано к динамически установленному значению $ PORT.
источник
Если, как и я, вы настраиваете Heroku для запуска сценария из своего
package.json
файла при развертывании, убедитесь, что вы не указали значениеPORT
этого сценария жестко ! Если вы это сделаете, вы в конечном итоге, как я, и потратите час, пытаясь выяснить, почему вы получаете эту ошибку.источник
У меня была такая же проблема, но с экспрессом и сервером apollo. Решение отсюда :
источник
В моем случае у меня было две проблемы ...
1) нет прослушивателя вообще из-за запуска приложения из другого входного файла, и этот скрипт запуска был удален из "скриптов" package.json
2) Чувствительная к регистру проблема с «Sequelize» вместо «Sequelize»
источник
Я использую ReactJs, если вы хотите загрузить в heroku, добавьте это в ваш webpack.config.js
Потому что, если не добавить, у вас будет ошибка
источник
В моем случае ни порт, ни хост не были проблемой. Он
index.js
был разделен на 2 файла.server.js
:от
package.json
мы побежалиnode app.js
.Видимо, это была проблема. Как только я объединил их в один файл, приложение Heroku развернулось, как и ожидалось.
источник
Моя проблема заключалась в том, что при развертывании на героку я получил ошибку:
при беге
heroku logs --tail
в терминале. НО приложение будет работать как положено, когда я запускаю сервер локально.У меня было это в моем
index.js
файле (файл сервера)Но должен был иметь это
Используйте
process.env.PORT
, нетprocess.env.port
, потому чтоport
это не то же самое, чтоPORT
очевидно.Кредит на гпрасант .
источник
Я понял, что мне не нужен номер порта в конечной точке запроса, поэтому конечная точка была
herokuapp.com
и неherokuapp.com:5000
.listen()
Вызов может быть без хозяина и обратного вызова:источник