我在heroku上创建了一个使用imagemagick的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的临时目录和环境变量。
任何帮助?
编辑:变量现在是绝对的。
答案 0 :(得分:1)
您确定它不是权限问题吗?你能写一个简单的文本文件到/app/temp
吗?什么都没有被读或写,这听起来像是一个权限问题。也许它不一定是ImageMagick的保护设计,而是heroku或你的编程环境?
您尝试使用此目录,它的特殊之处在于它包含损坏或不完整的文件 - 当某些软件运行时,它可能具有特殊保护或防护。 temp
目录通常被设计(或假设)以免受用户干扰,因为它们只能由程序本身使用和使用 - 而不是程序的用户命令。