Rails アプリでオーディオ ファイルのビット レートを識別するために FFMPEG を使用しています。S3 からファイルをダウンロードし、一時的に tmp フォルダーに保存してから、それに対して FFMPEG コマンドを実行しています。
ローカルでは、すべてが期待どおりに完全に実行されています。問題は展開時に発生し、FFMPEG から何も返されません。
s3 = AWS::S3.new(
:access_key_id => ENV["AWS_ACCESS_KEY_ID"],
:secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"])
object = s3.buckets[ENV["AWS_S3_BUCKET"]].objects[CGI::unescape(self.url)]
tempname = Digest::MD5.hexdigest(DateTime.now.to_s) + "." + self.file_format
File.open(Rails.root.to_s + '/tmp/' + tempname, 'wb') do |f|
f.write(object.read)
end
dl = Rails.root.to_s + '/tmp/' + tempname
brcommand = "ffmpeg -i " + dl + " 2>&1 | grep Duration | sed 's/Duration: \(.*\), start/\1/g'"
ffmpeg = %x{#{brcommand}}
%x{ffmpeg_command} を使用してコマンド ラインにアクセスしているため、Rails でネイティブに実行されているかのようにファイルが見つからないという問題が発生する可能性があるかどうかを迷っています。
サーバーのコマンドラインでFFMPEGを使用したので、正常に動作していることがわかります。