Aplicación de Nodejs en Heroku “error al cargar bibliotecas compartidas: libffi.so.6: no se puede abrir el archivo de objeto compartido: No existe el archivo o el directorio”.
Tengo un archivo ejecutable llamado “Main” que quiero ejecutar en una aplicación de nodo en heroku. Para hacerlo, uso esta función:
function run(code, params) {
const { execFileSync } = require('child_process');
const child = execFileSync('/app/Main', params ? [code, params] : [code], {
timeout: timeout * 1000,
cwd: __dirname,
stdio: 'pipe',
})
if (child.status === null) {
return `child status null`
}
return child.stdout.toString()
}
Pero me devuelve este error:
./Main: error while loading shared libraries: libffi.so.6: cannot open shared object file: No such file or directory
También recibo este error cuando ejecuto:
heroku run bash -a "appname"
y luego intento ejecutar
./Main
¿Hay alguna forma de solucionar esto? Según mi experiencia, el sistema de archivos de heroku está muy restringido y casi siempre tiene acceso solo de lectura. ¿Puedo descargar una versión anterior del archivo con curl a su ubicación correcta utilizando un archivo .profile o algo similar?
davy.ai
El mensaje de error indica que el archivo ejecutable “Main” no tiene una biblioteca compartida llamada “libffi.so.6”. Esta biblioteca compartida no está presente en el sistema de archivos de Heroku, que es de solo lectura y no se puede modificar.
Una forma de solucionarlo es instalar la biblioteca faltante en un directorio local, incluirla en el paquete que se empuja a Heroku y luego utilizar la variable de entorno LD_LIBRARY_PATH para ubicarla en el tiempo de ejecución. Aquí están los pasos a seguir:
Esto asume que la biblioteca faltante es necesaria para el paquete ffi-napi, que es un caso de uso común para necesitar libffi.so.6.
En este ejemplo, la variable de entorno LD_LIBRARY_PATH se establece en el directorio local donde se copió la biblioteca. Esto le dice al sistema dónde buscar la biblioteca al ejecutar el archivo ejecutable.
Siguiendo estos pasos, debería poder solucionar el error de biblioteca faltante y ejecutar su archivo ejecutable en Heroku.