Tengo una aplicación Express alojada en Heroku. Localmente funciona bien, pero sigue fallando en Heroku. Cada vez que voy a él, aparece la página 'Error de aplicación'.
Verifiqué dos veces todas las variables de entorno y parecen estar bien.
Los registros de Heroku no ofrecen exactamente mucha ayuda:
2017-04-16T23:02:49.001768+00:00 heroku[web.1]: State changed from crashed to starting 2017-04-16T23:02:52.072906+00:00 heroku[web.1]: Starting process with command `npm run start` 2017-04-16T23:02:56.042611+00:00 app[web.1]: 2017-04-16T23:02:56.042628+00:00 app[web.1]: > my-app@0.0.1 start /app 2017-04-16T23:02:56.042629+00:00 app[web.1]: > node bin/app 2017-04-16T23:02:56.042630+00:00 app[web.1]: 2017-04-16T23:02:57.200912+00:00 heroku[web.1]: State changed from starting to crashed 2017-04-16T23:02:57.201454+00:00 heroku[web.1]: State changed from crashed to starting 2017-04-16T23:02:57.192198+00:00 heroku[web.1]: Process exited with status 0 2017-04-16T23:03:00.981528+00:00 heroku[web.1]: Starting process with command `npm run start` 2017-04-16T23:03:04.312475+00:00 app[web.1]: 2017-04-16T23:03:04.312489+00:00 app[web.1]: > my-app@0.0.1 start /app 2017-04-16T23:03:04.312490+00:00 app[web.1]: > node bin/app 2017-04-16T23:03:04.312491+00:00 app[web.1]: 2017-04-16T23:03:06.093211+00:00 heroku[web.1]: Process exited with status 0 2017-04-16T23:03:06.112842+00:00 heroku[web.1]: State changed from starting to crashedEntonces intenté iniciar la aplicación manualmente:
$ heroku run bash ... $ npm run startNo tengo errores. Estoy usando el administrador de procesos pm2, así que lo revisé para ver si la aplicación se está ejecutando y parece que sí:
$ node_modules/.bin/pm2 list ...Pero luego, cuando voy a abrir mi aplicación, aparece la misma página de 'Error de aplicación' que antes.
'reinicio heroku' no ayuda. Simplemente se bloquea de nuevo cada vez.
La única diferencia entre mi entorno local y Heroku (hasta donde puedo decir al menos...) es que localmente tengo un archivo desde el que estoy leyendo una clave privada RSA, y en Heroku esa clave se lee desde el entorno. .
Editar: según lo solicitado, aquí está mi Procfile:
web: npm run start¿Algunas ideas?
Su aplicación debe comenzar a escuchar el puerto definido en el env. Por ejemplo, si tiene una aplicación expressjs, debería verse así:
const express = require('express') const app = express() const port = process.env.PORT || 3000 app.get('/', (req, res) => res.send("Hello world")) app.listen(port, () => console.log(`Example app listening on port ${port}!`))Si la aplicación no se vincula al puerto correcto, heroku considerará que la aplicación no está en buen estado y la cerrará.
Debe ver esta línea en los registros, lo que indica que heroku reconoció la aplicación como saludable:
State changed from starting to up Tenga en cuenta que esto del puerto es un requisito especial para el proceso web . Los otros procesos en su aplicación no tienen tal requisito.
Prueba 2 cosas: Cambia tu perfil:
web: node start.jsLuego, asegúrese de que su proceso web se ejecute al ampliarlo:
heroku ps:scale web=1En su computadora en una ventana de terminal, ejecute este comando en su proyecto:
heroku local webSimula cómo Heroku ejecuta su aplicación y debería brindarle información de lo que está sucediendo.