Estoy usando titiritero en Node para tomar una captura de pantalla de un dominio, pero tengo algunos problemas inconsistentes.
Las cosas funcionan bien cuando ejecuto el código localmente, pero cuando lo tengo implementado en Heroku obtendré un 503 (servicio no disponible) 8/10 veces cuando pruebo las cosas. No estoy seguro de por qué funcionará esas 2/10 veces.
Tengo los complementos en Heroku y he intentado restablecerlos para asegurarme de que se carguen en el orden correcto, como han mencionado algunas soluciones. También intenté cambiar la configuración dentro de la función titiritero, como las que se muestran aquí y tener 'sin cabeza: verdadero'
Estoy enviando la imagen como una cadena base64 para luego mostrarla en la interfaz.
Aquí está mi código de función, ruta api y solicitud de interfaz:
Código de función:
async function captureScreenshot(domain) { try { const browser = await puppeteer.launch({ args: [ "--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage", ], }); const page = await browser.newPage(); await page.setViewport({ width: 1440, height: 1080 }); await page.goto(`http://${domain}`); let domainScreenshot = await page.screenshot({ type: "jpeg", quality: 75, }); domainScreenshot = Buffer.from(domainScreenshot).toString("base64"); await browser.close(); return domainScreenshot; } catch (err) { console.log(`❌ Error: ${err.message}`); } }Ruta API:
router.get("/screenshot", async (req, res, next) => { try { const { domain } = req.query; const buffer = await captureScreenshot(domain); res.setHeader("Content-Type", "image/png"); res.send(buffer); } catch (error) { next(error); } });Solicitud de reducción:
export const fetchScreenshot = (domain) => async (dispatch) => { try { const params = { domain, }; const { data: imgUrl } = await axios.get("/api/domainData/screenshot", { params, }); if (imgUrl) { dispatch(setImgURL(domain, imgUrl)); } } catch (error) { console.error(error); } };Encontré una solución:
Agregué esta línea a la matriz de argumentos del titiritero:
"--single-process"Todavía tiene errores, pero es más como 1/10 veces, lo que es mucho más aceptable.