【问题标题】:Rails Elastic Beanstalk - No Such File or DirectoryRails Elastic Beanstalk - 没有这样的文件或目录
【发布时间】:2013-03-31 21:41:17
【问题描述】:

我有一个使用 Elastic Beanstalk 部署的 rails 应用程序。我想使用 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

这些权限有限制吗?

任何帮助将不胜感激

【问题讨论】:

  • 不确定,为什么会出现这个问题,好像没问题。你能检查权限吗?
  • 我已经为帖子添加了文件权限
  • 好的,所以我认为我已经将其范围缩小到无法使用 ffmpeg 的实例上的 webapp 用户。关于如何解决这个问题的任何想法?
  • .wav 文件的权限看起来不错;还要检查包含它的 tmp/ 目录的权限。还有几件事要尝试和排除故障:将 unix 命令作为 webapp 执行:'sudo -u webapp ffmpeg -i /var/app/...' 另外,测试运行 FFMPEG::Movie.new(dl) 行rails 控制台,以 webapp 用户身份运行。

标签: ruby-on-rails amazon-ec2 amazon-elastic-beanstalk


【解决方案1】:

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

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)

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

【讨论】:

  • 一次构建路径的公平点。不过,我仍然遇到同样的错误......
猜你喜欢
  • 2018-02-10
  • 2015-07-02
  • 2015-11-30
  • 2020-10-09
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
相关资源
最近更新 更多