【问题标题】:Cloudfoundry [Cloudfoundry] File.open ruby rails resque classCloudfoundry [Cloudfoundry] File.open ruby​​ rails resque 类
【发布时间】:2012-11-11 18:32:48
【问题描述】:

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

/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 返回错误的文件/目录

【问题讨论】:

    标签: ruby-on-rails file-io cloud-foundry


    【解决方案1】:

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

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

    这很重要,因为:

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

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

    【讨论】:

    • 上传它的位是 ruby​​ rails 服务器应用程序。这将启动一个 resque 例程,然后解析 150 兆奇数的 XML 文件和弹出数据库。然而,这个 resque worker 可能是另一个应用程序......redis 是主应用程序的服务,但 worker 命令是一个独立的应用程序。我不认为 cloudfoundry 允许工作人员与服务器应用程序是同一个实例
    • 另外,cloudfoundry 允许你拥有一个 redis 服务位,这似乎有点奇怪,工作人员创建的这些服务位无法从 redis 服务器应用程序读取文件
    • 看起来 Dropbox 可能是一个解决方案。看起来阅读以下内容会有所帮助。 dropbox.com/developers/start/files#ruby。虽然没有确认它在cloudfoundry上工作。没有确认它是否适用于 cloudfoundry
    • Dropbox 工作了!!! session = DropboxSession.new(DROPCONFIG['app_key'], DROPCONFIG['app_secret']) logger.debug "SESSIONS OPENED" session.set_access_token(DROPCONFIG['access_token'], DROPCONFIG['access_token_secret']); logger.debug "BeforeDropboxclient" 客户端 = DropboxClient.new(session, 'dropbox')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多