Tengo mi primera aplicación node.js (funciona bien localmente), pero no puedo implementarla a través de heroku (la primera vez también con heroku). El código está abajo. SO no me deja escribir tanto código, por lo que solo diría que ejecutar el código localmente 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 ?
Respuestas:
Heroku asigna dinámicamente un puerto a su aplicación, por lo que no puede establecer el puerto en un número fijo. Heroku agrega el puerto al entorno, para que pueda sacarlo de allí. Cambie su escuchar esto:
De esa manera, seguirá escuchando el puerto 5000 cuando realice la prueba localmente, pero también funcionará en Heroku.
Puede consultar los documentos de Heroku en Node.js aquí .
fuente
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:
fuente
Vale la pena mencionar que si su código no especifica un puerto, entonces no debería ser un
web
proceso y probablemente debería ser unworker
proceso en su lugar.Entonces, cambie su
Procfile
lectura (con su comando específico completado):worker: YOUR_COMMAND
y luego también se ejecuta en CLI:
$ heroku scale worker=1
fuente
start
script en mipackage.json
Tuve el mismo problema al usar el proyecto generado por la pila completa angular de yeoman y eliminar el parámetro IP funcionó para mí.
Reemplacé este código
con
fuente
Para aquellos que pasan tanto un puerto como un host, tenga en cuenta que Heroku no se unirá
localhost
.Debe pasar
0.0.0.0
por el host.Incluso si está utilizando el puerto correcto. Tuvimos que hacer este ajuste:
Luego puede iniciar el servidor, como de costumbre:
Puede ver más detalles aquí: https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error
fuente
const port = 3000;
paraconst port = process.env.PORT || 3000;
que funcione en herokuEn mi caso, estaba usando un ejemplo de https://hapijs.com/
Para solucionar el problema reemplacé
con
fuente
process.env.PORT
correctamente, pero dejando en elhost
parámetro: no puedes :) ver aquí: stackoverflow.com/a/34956330/626369Tuve el mismo problema y cambiar mi puerto de escucha de 3000 a (process.env.PORT || 5000) resolvió el problema.
fuente
En mi caso, estaba usando Babel con el complemento babel-plugin-transform-inline-environment-variables . Aparentemente, Heroku no establece la variable env del PUERTO cuando realiza una implementación, por
process.env.PORT
lo que será reemplazado porundefined
, y su código recurrirá al puerto de desarrollo del que Heroku no sabe nada.fuente
Los siguientes pasos resolvieron mi solución:
Edición de package.json como:
y Server.js como:
fuente
package.json
. Creo que actualizarlo también debería resolver este problema.Tuve el mismo problema porque no definí Procfile. Confirme un archivo de texto en el directorio raíz de su aplicación que se llama Procfile sin una extensión de archivo. Este archivo le dice a Heroku qué comando (s) ejecutar para iniciar su aplicación.
web: node app.js
fuente
Tuve el mismo problema que pude resolver con reemplazar 'localhost' con IP que es '0.0.0.0'
fuente
No se puede establecer un número fijo para el puerto, heroku lo asigna dinámicamente usando
process.env.PORT
. Pero puedes agregarlos a ambos, asíprocess.env.PORT || 5000
. Heroku usará el primero, y su localhost usará el segundo.Incluso puede agregar su función de devolución de llamada. Mira el código a continuación
fuente
De todas las soluciones que he intentado, nadie funciona como se esperaba, estudio heroku por defecto, el archivo .env debe mantener la convención PORT, el proceso.env.PORT, heroku buscará por defecto la palabra clave PORT.
Cancele cualquier cambio de nombre como APP_PORT = en su lugar use PORT = en su archivo env.
fuente
Desde el proceso heroku bash, transfiera el valor de $ PORT a su aplicación de nodo utilizando un analizador de opciones como hilos.
Aquí hay un ejemplo de cómo podrías hacer eso. En el objeto de secuencias de comandos, dentro de package.json, agregue un método de inicio "servidor de nodo --port $ PORT".
En su archivo de servidor, use yargs para obtener el valor de la opción de puerto (--port $ PORT) del método de inicio:
Ahora, cuando se inicia su aplicación, se unirá al valor establecido dinámicamente de $ PORT.
fuente
Si, como yo, está configurando a Heroku para ejecutar un script desde su
package.json
archivo en la implementación, ¡asegúrese de no haber codificado el valor dePORT
ese script! Si lo hace, terminará como yo y pasará una hora tratando de descubrir por qué está recibiendo este error.fuente
Tuve el mismo problema pero con express y apollo-server. La solución desde aquí :
fuente
En mi caso tuve dos problemas ...
1) no escucha en absoluto debido a la ejecución de la aplicación desde otro archivo de entrada y este script de ejecución se eliminó de los "scripts" de package.json
2) Problema sensible a mayúsculas y minúsculas con 'Sequelize' en lugar de 'sequelize'
fuente
Yo tuve el mismo problema. Finalmente, me di cuenta de que no necesito el número de puerto en el punto final de la solicitud. (entonces el punto final fue https: //...herokuapp.com y no https: //...herokuapp.com: 5000 ).
La llamada listen () puede ser sin host y devolución de llamada: server.listen (5000);
fuente
En mi caso, ni el puerto ni el host fueron el problema. Nuestro index.js se dividió en 2 archivos server.js
desde package.json ejecutamos el nodo app.js
Aparentemente ese era el problema. Una vez que combiné los dos en un archivo, la aplicación heroku se implementó como se esperaba.
Espero que ayude a alguien ya que no he encontrado a nadie que haya encontrado este problema
fuente
Uso ReactJs, si quieres subirlo a heroku agrega esto en tu webpack.config.js
Porque si no agregas tendrás error
fuente
Crédito a: gprasant
Solo quiero volver a publicar esto porque esta respuesta solucionó mi problema. Mi problema fue que al implementarlo en heroku recibí un error "El proceso web no pudo vincularse a $ PORT dentro de los 60 segundos posteriores al lanzamiento" al ejecutar "heroku logs --tail" en el terminal. PERO la aplicación se ejecutará como se esperaba cuando ejecuté el servidor localmente.
Tenía esto en mi archivo index.js (archivo de servidor)
Pero debería haber tenido esto
Use process.env.PORT no process.env.port !!!! puerto! = PUERTO !!! (obviamente)
Crédito a: gprasant
fuente