Подтвердить что ты не робот

FFMPEG не может читать файлы в /tmp/on Heroku

Я создал приложение nodejs, размещенное на heroku, которое использует imagemagick. Я выполняю эту операцию:

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 сообщает мне, что этот каталог уже существует.

Я также попытался изменить каталог tempememy temp с переменной окружения, выполнив export MAGICK_TMPDIR="temp".

Любая помощь?

Изменить: переменные теперь абсолютные.

4b9b3361

Ответ 1

Вы уверены, что это не проблема разрешений? Можете ли вы написать простой текстовый файл на /app/temp? Ничто не читается и не написано вообще, это звучит как проблема разрешений. Может быть, это не обязательно дизайн защиты ImageMagick, а скорее геройку или ваша среда программирования?

Этот каталог, который вы пытаетесь использовать, особенный в том, что он содержит поврежденные или неполные файлы - у него могут быть специальные защиты или защитные меры, когда выполняется определенное программное обеспечение. Каталоги temp обычно разрабатываются (или предполагаются) для защиты от пользовательских помех, поскольку они должны использоваться и обрабатываться самой программой, а не пользовательскими командами программы.

Этот вопрос похож на ваш, он может помочь вам.