node.js - 将 Graphicsmagick 作为 AWS Lambda 层运行
问题描述
我正在尝试设置一个 Lambda 层以使用 Graphicsmagick 为图像添加水印。然而,我有点坚持让二进制文件与库一起工作,那么如何在子进程中设置到库的链接?
到目前为止,我已经使用以下选项构建了 Graphicsmagick 二进制文件:
./configure --prefix=/opt/graphicsmagick --enable-shared=no --enable-static=yes --disable-shared --disable-installed
几乎遵循了此Gist中有关此答案和想法的说明。然而,任何一个都不涉及将二进制文件作为一个层运行。所以想知道我在这里遗漏了一些细节吗?
这是我的处理程序的代码:
module.exports.run = async (event, context, callback) => {
process.env['IM_PATH'] = '/opt/graphicsmagick/bin/'
process.env['LD_LIBRARY_PATH'] = '/opt/graphicsmagick/lib'
process.env['DYLD_LIBRARY_PATH'] = '/opt/graphicsmagick/lib'
process.env['MAGICK_HOME'] = '/opt/graphicsmagick/'
...
const graphicsmagick = '/opt/graphicsmagick/bin/gm'
const graphicsmagickArgs = [
'-dissolve', '15',
'-tile',
watermark,
inputImage,
output,
]
spawn(graphicsmagick, graphicsmagickArgs, { stdio: 'inherit' })
.on('close', () => console.log('success'))
.on('error', error => console.log('error', error))
...
}
我也尝试过使用环境变量运行 exec,如下所示:
exec('/opt/graphicsmagick/bin/gm', { env:
{
'IM_PATH': `/opt/graphicsmagick/bin/`,
'LD_LIBRARY_PATH': '/opt/graphicsmagick/lib',
'DYLD_LIBRARY_PATH': '/opt/graphicsmagick/lib',
'MAGICK_HOME': `/opt/graphicsmagick/`,
}}, (err, stdout, stderr) => {
console.log('error', err)
console.log('stdout', stdout)
console.log('stderr', stderr)
})
该图层运行 Graphicsmagick,但未找到库文件夹。我在控制台中收到以下错误:
/opt/graphicsmagick/bin/gm: error while loading shared libraries:libpng15.so.15: cannot open shared object file: No such file or directory
解决方案
推荐阅读
- javascript - UnhandledPromiseRejectionWarning, readfile, writefile, async
- java - 未从 Firestore 获取 DatabaseReference
- twilio - Twilio 在 SIP 呼叫上播放保持音乐
- angular-cli - 为什么 Angular 项目文件夹变成了只读的?
- python - 使用多 GPU 和两阶段 CNN 模型的问题
- c++ - 删除指针后出现分段错误(核心转储)
- tailwind-css - 在反应中自定义tailwindcss主题(使用vite)没有效果
- apache2 - apache2 忽略默认主机并始终重定向到域,即使使用 IP
- javascript - 在 JQuery 回调中找不到对函数的引用
- c++ - 带有 C++ 中的指针和对象的“static_cast”