【问题标题】:FFMPEG cannot read files in /tmp/ on HerokuFFMPEG 无法读取 Heroku 上 /tmp/ 中的文件
【发布时间】: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


【解决方案1】:

您确定这不是权限问题吗?你能写一个简单的文本文件到/app/temp吗?什么都没有被读取或写入,这听起来像是权限问题。可能不一定是ImageMagick的保护设计,而是heroku或者你的编程环境?

您正在尝试使用的这个目录,它的特殊之处在于它包含损坏或不完整的文件 - 当某些软件正在运行时,它可能有特殊的保护或防护措施。 temp 目录通常被设计(或假设)为免受用户干扰,因为它们只能由程序本身使用和处理,而不是程序的用户命令。

This question is similar to yours,或许能帮到你。

【讨论】:

  • 这与其余的一起告诉我,我应该在我的应用程序根目录 (/app/tmp) 中创建一个文件夹。我可以这样做,但我需要 ImageMagick 也可以使用该文件夹。这个答案没用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2013-05-17
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
相关资源
最近更新 更多