【发布时间】:2018-06-26 18:05:09
【问题描述】:
我创建了一个使用 imagemagick 托管在 heroku 上的 nodejs 应用程序。我正在做这个操作:
require('child_process').exec(`convert -quiet -delay 1 output.avi ${gif}`);
这应该将output.avi(存在)转换为 gif 文件。在这种情况下,gif 是 "/app/temp/gifs/xstrycatdq.gif"。此命令在我的本地 Windows 机器上完美运行。当我使用path 模块获取带有path.join 和__dirname 的变量时。
我已经安装了heroku buildpack:
我收到的错误是:
Command failed: convert -quiet -delay 1 output.avi /app/temp/gifs/xstrycatdq.gif
convert: DelegateFailed `'ffmpeg' -nostdin -v -1 -vframes %S -i '%i' -vcodec pam -an -f rawvideo -y '%u.pam' 2> '%Z'' @ error/delegate.c/InvokeDelegate/1919.
convert: UnableToOpenBlob `magick-93R4VJcemPz0z1.pam': No such file or directory @ error/blob.c/OpenBlob/2705.
convert: NoImagesDefined `/app/temp/gifs/xstrycatdq.gif' @ error/convert.c/ConvertImageCommand/3257.
似乎 /tmp/ 目录无法写入或任何内容。我也尝试过mkdir /tmp/,但 bash 告诉我这个目录已经存在。
我还尝试通过 export MAGICK_TMPDIR="temp" 使用环境变量更改 imagemagick 的临时目录。
有什么帮助吗?
编辑:变量现在是绝对的。
【问题讨论】:
-
这个问题和
bash有什么关系? -
我使用
child_process模块来执行bash命令。 -
我听说过 Imagemagick 不会从 /tmp 读取的其他情况。我怀疑这样做是为了安全,但不知道事实。我建议不要把图片放在那里。
-
@fmw42 这不是我的文件,是 IM 的临时文件。
-
如果你确定它与 '/tmp' 有关系,你能用 'lsattr -d /tmp' 之类的命令检查它是否有任何文件属性吗?并检查“getfacl /tmp”。它有什么线索吗?
标签: node.js heroku imagemagick tmp