Eu tenho meu primeiro aplicativo node.js (funciona bem localmente) - mas não consigo implantá-lo via heroku (pela primeira vez com o heroku também). O código está abaixo. O SO não me permite escrever tanto código, então eu diria que a execução local do código também na minha rede não apresenta problemas.
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/');
Qualquer ideia ?
Respostas:
O Heroku atribui dinamicamente ao seu aplicativo uma porta, para que você não possa defini-la como um número fixo. O Heroku adiciona a porta ao ambiente, para que você possa puxá-la de lá. Mude sua escuta para isso:
Dessa forma, ele ainda escutará a porta 5000 quando você testar localmente, mas também funcionará no Heroku.
Você pode conferir os documentos do Heroku no Node.js aqui .
fonte
O erro ocorre quando o Heroku falha ao vincular a porta ou o nome do host em
server.listen(port, [host], [backlog], [callback])
.O que a Heroku exige é
.listen(process.env.PORT)
ou.listen(process.env.PORT, '0.0.0.0')
Portanto, de maneira mais genérica, para oferecer suporte a outros ambientes, use o seguinte:
fonte
Vale ressaltar que, se o seu código não especificar uma porta, não deverá ser um
web
processo e provavelmente deve ser umworker
processo.Portanto, altere seu
Procfile
para ler (com seu comando específico preenchido):worker: YOUR_COMMAND
e também execute na CLI:
$ heroku scale worker=1
fonte
start
roteiro na minhapackage.json
Eu tive o mesmo problema ao usar o projeto gerado pelo angular-fullstack da yeoman e remover o parâmetro IP funcionou para mim.
Eu substituí este código
com
fonte
Para aqueles que estão passando por uma porta e um host, lembre-se de que o Heroku não fará a ligação
localhost
.Você deve passar
0.0.0.0
pelo host.Mesmo se você estiver usando a porta correta. Tivemos que fazer esse ajuste:
Então você pode iniciar o servidor, como de costume:
Você pode ver mais detalhes aqui: https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error
fonte
const port = 3000;
const port = process.env.PORT || 3000;
No meu caso, eu estava usando o exemplo de https://hapijs.com/
Para corrigir o problema, substituí
com
fonte
process.env.PORT
corretamente, mas deixando nohost
parâmetro: você não pode :) veja aqui: stackoverflow.com/a/34956330/626369Eu tive o mesmo problema e alterar minha porta de escuta de 3000 para (process.env.PORT || 5000) resolveu o problema !!
fonte
No meu caso, eu estava usando o Babel com o plug-in babel-plugin-transform-inline-environment-variables . Aparentemente, o Heroku não define a variável env env ao fazer uma implantação; portanto,
process.env.PORT
ela será substituída porundefined
e seu código retornará à porta de desenvolvimento da qual a Heroku não conhece nada.fonte
As etapas abaixo resolveram minha solução:
Editando package.json como:
e Server.js como:
fonte
package.json
. Acredito que atualizá-lo também deve resolver esse problema.Eu tive o mesmo problema porque não defini o Procfile. Confirme um arquivo de texto no diretório raiz do seu aplicativo chamado Procfile sem uma extensão de arquivo. Esse arquivo informa ao Heroku quais comandos executar para iniciar seu aplicativo.
web: node app.js
fonte
Eu tive o mesmo problema e resolvi o problema com a substituição de 'localhost' pelo IP, que é '0.0.0.0'
fonte
Um número fixo não pode ser definido para a porta, o heroku o atribui dinamicamente usando
process.env.PORT
. Mas você pode adicionar os dois, assimprocess.env.PORT || 5000
. Heroku usará o primeiro e seu host local usará o segundo.Você pode até adicionar sua função de retorno de chamada. Veja o código abaixo
fonte
Em toda a solução, tentei que ninguém funcionasse conforme o esperado, estudo heroku por padrão, o arquivo .env deve manter a convenção PORT, o processo.env.PORT, heroku por padrão, procurará a palavra-chave PORT.
Cancele qualquer renomeação, como APP_PORT =, em vez disso, use PORT = no seu arquivo env.
fonte
No processo heroku bash, transmita o valor de $ PORT para o aplicativo do nó usando um analisador de opções como yargs.
Aqui está um exemplo de como você pode fazer isso. No objeto scripts, dentro de package.json, adicione um método start "node server --port $ PORT".
No arquivo do servidor, use yargs para obter o valor da opção port (--port $ PORT) do método start:
Agora, quando o aplicativo for iniciado, ele será vinculado ao valor definido dinamicamente de $ PORT.
fonte
Se, como eu, você estiver configurando o Heroku para executar um script a partir do seu
package.json
arquivo na implantação, verifique se não codificou o valorPORT
desse script! Se fizer isso, você terminará como eu e passará uma hora tentando descobrir por que está recebendo esse erro.fonte
Eu tive o mesmo problema, mas com express e apollo-server. A solução daqui :
fonte
No meu caso, tive dois problemas ...
1) nenhum ouvinte por causa da execução do aplicativo de outro arquivo de entrada e esse script de execução foi excluído do package.json "scripts"
2) Problema que diferencia maiúsculas de minúsculas com 'Sequelize' em vez de 'sequelize'
fonte
Eu tive o mesmo problema. Eventualmente, percebi que não preciso do número da porta no endpoint da solicitação. (portanto, o terminal era https: //...herokuapp.com e não https: //...herokuapp.com: 5000 ).
A chamada listen () pode ser sem host e retorno de chamada: server.listen (5000);
fonte
No meu caso, nem a porta nem o host foram o problema. Nosso index.js foi dividido em 2 arquivos server.js
do package.json, executamos o nó app.js
Aparentemente, esse era o problema. Depois de combinar os dois em um arquivo, o aplicativo heroku foi implantado conforme o esperado.
Espero que ajude alguém, pois não encontrei ninguém que tenha encontrado esse problema
fonte
Eu uso ReactJs, se você quiser fazer o upload para o heroku, adicione-o no seu webpack.config.js
Porque se não adicionar você terá erro
fonte
Crédito para: gprasant
Eu só quero repassar isso porque esta resposta resolveu meu problema. Meu problema foi que, ao implantar no heroku, recebi o erro "O processo da Web falhou ao vincular ao $ PORT dentro de 60 segundos após o lançamento" ao executar "heroku logs --tail" no terminal. MAS o aplicativo seria executado conforme o esperado quando eu executei o servidor localmente.
Eu tinha isso no meu arquivo index.js (arquivo do servidor)
Mas deveria ter tido isso
Use process.env.PORT não process.env.port !!!! porta! = PORTA !!! (obviamente)
Crédito para: gprasant
fonte