2013-04-09 51 views
0

我有一个使用Elastic Beanstalk部署的Rails应用程序。我想使用ffmpeg获取有关存储在S3上的音频文件的信息,并且使用streamio-ffmpeg gem使其更容易一些。Rails Elastic Beanstalk - 没有这样的文件或目录

我已经在EC2实例上安装了ffmpeg,在SSH进入实例时工作正常,并且本地一切工作都很好。我基本上是从S3下载文件,并将其存储在/ tmp文件夹中,然后通过streamio-ffmpeg gem调用该文件。

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) 

错误发生在这最后一行,当我得到这个错误

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

我在这里做一些愚蠢的事?当我进入实例SSH时,文件就是它应该在的地方,当我在命令行中运行该行时,它运行得非常好。

UPDATE 我在Linux方面的专家,但在tmp目录-l运行LS给我

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

是这些权限的限制?

任何帮助,将不胜感激

+0

不知道,为什么问题正在发生,似乎没问题。你能检查许可吗? – 2013-04-09 12:57:44

+0

我已将文件权限添加到帖子 – user1756535 2013-04-09 13:10:35

+0

好吧,所以我认为我已经将范围缩小到web应用程序用户,但不能使用ffmpeg。任何想法如何我可以解决这个问题? – user1756535 2013-04-09 19:29:43

回答

0

首先,我只会构建完整路径一次,是指用同样的方式在两地,所以,有没有他们的机会不同步的,如果你曾经改变路径如何放在一起。它也应该使它更易于阅读。

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) 

如果仍然没有找到,我能想到的唯一的事情就是某种形式的竞争条件,如果它不是,它已经关闭之后的OS相当明显。似乎不太可能。

+0

一次构建路径的公平点。尽管我仍然遇到同样的错误... – user1756535 2013-04-09 13:36:01

相关问题