Error de Heroku + node.js (el proceso web no pudo vincularse a $PORT dentro de los 60 segundos posteriores al inicio)

Resuelto user428900 asked hace 11 años • 39 respuestas

Tengo mi primera aplicación node.js (funciona bien localmente), pero no puedo implementarla a través de heroku (también la primera vez con heroku). El código está debajo. SO no me permite escribir tanto código, por lo que solo diría que ejecutar el código localmente y dentro de mi red no muestra ningún problema.

 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/');

Alguna idea ?

user428900 avatar Mar 29 '13 05:03 user428900
Aceptado

Heroku asigna dinámicamente un puerto a su aplicación, por lo que no puede configurar el puerto en un número fijo. Heroku agrega el puerto al env, para que puedas extraerlo desde allí. Cambia tu escucha a esto:

.listen(process.env.PORT || 5000)

De esa manera seguirá escuchando el puerto 5000 cuando realices pruebas localmente, pero también funcionará en Heroku. Nota importante : la palabra PORT debe estar en mayúscula.

Puede consultar los documentos de Heroku en Node.js aquí .

redhotvengeance avatar Mar 28 '2013 22:03 redhotvengeance

Vale la pena mencionar que si su código no especifica un puerto, entonces no debería ser un webproceso y probablemente debería ser un workerproceso.

Entonces, cambie su Procfilepara leer (con su comando específico completado):

worker: YOUR_COMMAND

y luego también ejecutar en CLI:

heroku scale worker=1
zthomas.nc avatar May 22 '2017 21:05 zthomas.nc

Para aquellos que pasan tanto un puerto como un host, tengan en cuenta que Heroku no se vinculará a localhost .

Debes pasar 0.0.0.0 por anfitrión.

Incluso si estás usando el puerto correcto. Tuvimos que hacer este ajuste:

# port (as described above) and host are both wrong
const host = 'localhost';
const port = 3000;

# use alternate localhost and the port Heroku assigns to $PORT
const host = '0.0.0.0';
const port = process.env.PORT || 3000;

Luego puedes iniciar el servidor, como de costumbre:

app.listen(port, host, function() {
  console.log("Server started.......");
});

Puedes ver más detalles aquí: https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error

gregb avatar Nov 21 '2017 18:11 gregb

El error ocurre cuando Heroku no pudo vincular el puerto o el nombre de host en server.listen(port, [host], [backlog], [callback]).

Lo que Heroku requiere es .listen(process.env.PORT)o.listen(process.env.PORT, '0.0.0.0')

De manera más genérica, para admitir otros entornos, use esto:

var server_port = process.env.YOUR_PORT || process.env.PORT || 80;
var server_host = process.env.YOUR_HOST || '0.0.0.0';
server.listen(server_port, server_host, function() {
    console.log('Listening on port %d', server_port);
});
Royce Lee avatar Aug 21 '2014 05:08 Royce Lee