FFMPEG не может читать файлы в /tmp/ на 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
,
Я установил геройку 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 говорит мне, что этот каталог уже существует.
Я также попытался изменить временный каталог imagemagick с помощью переменной среды, выполнив export MAGICK_TMPDIR="temp"
,
Любая помощь?
Изменить: переменные теперь являются абсолютными.
1 ответ
Вы уверены, что это не проблема разрешений? Можете ли вы написать простой текстовый файл /app/temp
? Ничего не читается и не пишется вообще, это звучит как проблема с разрешениями. Может быть, это не обязательно дизайн защиты ImageMagick, а скорее геройка или ваша среда программирования?
Этот каталог, который вы пытаетесь использовать, отличается тем, что в нем содержатся поврежденные или неполные файлы - в нем могут быть установлены специальные средства защиты или защиты, когда работает определенное программное обеспечение. temp
Каталоги обычно разрабатываются (или предполагаются) защищенными от вмешательства пользователя, поскольку они должны использоваться и обрабатываться только самой программой, а не командами пользователя программы.
Этот вопрос похож на ваш, он может вам помочь.