1

我正在使用云铸造。我上传文件并保存文件..我的例程返回路径和文件名

/var/vcap/data/dea/apps/Dwarfquery-0-99065f0be8880d91916257931ed91162/app/tmp/region1-legends10-11-2012-20:53.xml

但是,尝试使用 File.Open 读取它的预定 resque 例程返回以下错误

Errno::ENOENT 错误没有这样的文件或目录 - /var/vcap/data/dea/apps/Dwarfquery-0-99065f0be8880d91916257931ed91162/app/tmp/region1-legends10-11-2012-20:53.xml

这是上传服务器返回的路径...我在作业类的顶部添加了 require 'open-uri'

失败的线路是

File.open(fpath, 'r+') 做 |f|

其中 fpath 返回错误的文件/目录

4

1 回答 1

1

我根本不精通红宝石,只是为了澄清一下:

  • 上传的位和 Resque 例程是否是同一个“应用程序”的一部分(在 Cloud Foundry 意义上?)
  • 您是在文件上传后不久还是在很久之后(特别是在您的应用程序已经/可能已经重新启动之后?)

这很重要,因为:

  1. 每个“应用程序”都有自己的临时文件夹,显然一个应用程序无法访问另一个应用程序的文件系统。如果您使用多个“实例”部署您的应用程序,这也成立。每个实例都是一个独立的进程,有自己的文件系统。
  2. 本地文件系统存储是短暂的,每次应用重新启动时都会被清除

如果您需要在应用程序之间访问二进制数据,您将需要使用某种存储(例如 Mongo 的 GridFS)来使其持久化并且对两个应用程序可见。

于 2012-11-11T10:32:48.787 回答