Creé un script de NodeJs que usa Titiritero para obtener algunos datos de un sitio web y ponerlos en un archivo json.
Aquí está mi Dyno :
Si entro en heroku bash ( heroku run bash -a my-app ) y ejecuto el script ( npm run start ), funciona de maravilla.
En cambio, si ejecuto el script haciendo clic en el botón "Abrir aplicación", aparece una página con el siguiente error:
Echando un vistazo a los registros veo esto:
at=error code=H10 desc="App crashed" method=GET path="/" host=my-app.herokuapp.com request_id=653dbf69-d35c-4017-bxxf-cc0e1a5xxxce fwd="37.159.47.101" dyno= connect= service= status=503 bytes= protocol=https 2022-06-01T07:24:50.316302+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=my-app.herokuapp.com request_id=b49ac035-axxx-4372-a59e-118bcxxx6a3b fwd="37.159.47.101" dyno= connect= service= status=503 bytes= protocol=httpsPasé mucho tiempo buscando el error H10 y probé todas las soluciones que encontré, ninguna funcionó.
El punto es: ¿cuál es la forma correcta de iniciar un script de NodeJs ya que estoy usando Puppeteer y luego no tengo una página web para mostrar? Si uso el bash cuando lo cierro, el script también se elimina.
Finalmente descubrí cómo ejecutar un script que no es una aplicación web. He cambiado "web" a "worker" en el Procfile:
worker: npm start
y luego apague los dinamómetros web y encienda el nuevo trabajador nuevo:
(Puede llegar a lo mismo con Heroku CLI: heroku scale web=0 worker=1 )
¿Ha instalado el paquete web de marionetas que recomienda heroku? otra solución que funcionó para mí es usar la biblioteca "chrome-aws-lambda" que integra a titiritero y funciona en alojamientos como vercel o heroku
ejemplo de la biblioteca
import chromium from "chrome-aws-lambda"; const browser = chromium.puppeteer."any puppeteer function"Espero que esto te ayude.