2013-04-09 4 views
0

J'ai une application rails, déployée en utilisant Elastic Beanstalk. Je veux utiliser ffmpeg pour obtenir des informations sur les fichiers audio, qui sont stockés sur S3, et j'utilise la gemme streamio-ffmpeg pour rendre cela un peu plus facile.Rails Elastic Beanstalk - No tel fichier ou répertoire

J'ai installé ffmpeg sur l'instance EC2, ce qui fonctionne très bien quand SSH-ing dans l'instance, et tout fonctionne très bien localement. Je télécharge le fichier à partir de S3 et le stocke dans le dossier/tmp, puis je l'appelle via la gemme streamio-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 
audio = FFMPEG::Movie.new(dl) 

L'erreur se produit sur cette dernière ligne, quand je reçois cette erreur

Errno::ENOENT (No such file or directory - ffmpeg -i /var/app/current/tmp/46951a3d16abb2e5fcf1da9e4cf8e0f3.flac) 

Est-ce que je fais ici quelque chose de stupide? Lorsque je SSH dans l'instance, le fichier est où il devrait être, et quand je cours cette ligne dans la ligne de commande, il fonctionne parfaitement.

MISE À JOUR Je ne suis pas expert sur Linux, mais l'exécution ls -l dans le répertoire tmp me donne

-rw-r--r-- 1 webapp webapp 26445358 Apr 9 13:07 90da56d83822a0bf716b5dfaae27844b.wav 

-ce que ces autorisations restrictives?

Toute aide serait grandement appréciée

+0

Je ne sais pas pourquoi le problème se produit, il semble OK. Pouvez-vous vérifier la permission? –

+0

J'ai ajouté les autorisations de fichier à la publication – user1756535

+0

Ok, donc je pense que j'ai réduit cela à l'utilisateur webapp sur l'instance ne pouvant pas utiliser ffmpeg. Des idées sur comment je peux résoudre ça? – user1756535

Répondre

0

D'abord, je ne construire le chemin complet une fois et reportez-vous à la même manière dans les deux endroits, de sorte qu'il n'y a aucune chance de les sortir de la synchronisation si vous changez comment le chemin est mis ensemble. Cela devrait aussi le rendre plus facile à lire.

tempname = Digest::MD5.hexdigest(DateTime.now.to_s) + "." + self.file_format 
temppath = Rails.root.join('tmp', tempname) 
File.open(temppath, 'wb') do |f| 
    f.write(object.read) 
end 

audio = FFMPEG::Movie.new(temppath) 

Si elle est toujours pas trouvé, la seule chose que je peux penser est une sorte de condition de course, si elle est pas tout à fait visible au système d'exploitation juste après qu'elle a été fermée. Cela semble improbable.

+0

Juste point sur la construction du chemin une fois. Je reçois toujours la même erreur si ... – user1756535

Questions connexes