Ruby on rails Rails Elastic Beanstalk-没有这样的文件或目录

Ruby on rails Rails Elastic Beanstalk-没有这样的文件或目录,ruby-on-rails,amazon-ec2,amazon-elastic-beanstalk,Ruby On Rails,Amazon Ec2,Amazon Elastic Beanstalk,我有一个rails应用程序,使用Elastic Beanstalk部署。我想使用ffmpeg来获取有关存储在S3上的音频文件的信息,我正在使用streamio ffmpeg gem来简化这一过程 我已经在EC2实例上安装了ffmpeg,当SSH连接到实例中时,它工作正常,并且在本地一切都工作正常。我基本上是从S3下载文件,并将其存储在/tmp文件夹中,然后通过streamio ffmpeg gem调用该文件 s3 = AWS::S3.new( :access_key_id => ENV["

我有一个rails应用程序,使用Elastic Beanstalk部署。我想使用ffmpeg来获取有关存储在S3上的音频文件的信息,我正在使用streamio ffmpeg gem来简化这一过程

我已经在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到实例中时,文件就在它应该在的地方,当我在命令行中运行该行时,它运行得非常好

更新 我不是Linux方面的专家,但是在tmp目录中运行ls-l会让我

-rw-r--r-- 1 webapp webapp 26445358 Apr  9 13:07 90da56d83822a0bf716b5dfaae27844b.wav
这些权限有限制吗


任何帮助都将不胜感激

首先,我只会构建完整路径一次,并在两个位置以相同的方式引用它,这样,如果您更改路径的组合方式,它们就不会不同步。它还应该使它更容易阅读

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)

如果它仍然没有找到,我唯一能想到的就是某种竞争条件,如果它在关闭后对操作系统不太可见的话。但似乎不太可能

不确定,为什么会出现问题,看起来还可以。你能检查权限吗?我已经将文件权限添加到postOk中,所以我想我已经将范围缩小到实例上的webapp用户无法使用ffmpeg。关于如何解决这个问题有什么想法吗?对.wav文件的权限看起来不错;还要检查包含它的tmp/目录上的权限。还有几件事需要尝试和解决:以webapp的形式执行unix命令:“sudo-u webapp ffmpeg-i/var/app/…”另外,从rails控制台测试运行ffmpeg::Movie.new(dl)行,以webapp用户的身份运行。一次构建路径的公平性。但我还是会犯同样的错误。。。