【发布时间】:2015-08-05 03:37:15
【问题描述】:
所以,我这几天一直在努力解决这个问题...我需要从 S3 获取一个文件并将其写入 Heroku 上我的 Rails 应用程序的目录中。我必须有一个对 Heroku 上的临时文件系统的误解,因为我不知道为什么它不工作。
我正在运行 s3.bucket('bucket').object('file.csv').get(response_target: 'file.csv') 从 S3 获取文件并将其写入我的应用程序。最初我只是写了一个.rb 来执行此操作并使用Heroku Scheduler 运行它,但无济于事。然后,我将脚本变成了一个 rake 任务,并在 scheduler 上再次运行,但无济于事。我能够在我的开发环境中完美地运行 .rb 脚本和 rake 任务。
在阅读this 和this 了解临时文件系统的工作原理后,我认为该任务实际上正在运行,但文件被破坏(或者实际上存在但我看不到它?) 当我在heroku run bash 中使用ls 时。
谁能解释一下我发生了什么事?如果我从 S3 获取文件写入 Heroku 上的应用程序的努力是徒劳的?如果有其他选择吗?
如果在此之后我无法弄清楚,那么我将在 EC2 中设置我自己的环境。
【问题讨论】:
-
绝对有可能。您可以查看著名的 Hartl 教程 here,通过他的微博示例查看它的实际效果。如果我记得,当我阅读本教程时,我自己对此有点挣扎,我遇到的问题是政策(确保你有一个到位并且它足够广泛以允许你想要的行动)。
-
Heroku 不支持你想做的事情。可以将tmp文件写入本地文件系统,但是这些文件会被自动删除。
-
@steve 你能发布一个简单的例子吗?
-
@spickerman 从 S3 中提取此文件至关重要,每次用户使用该应用程序时都会使用这些内容...因此,您是否建议从 S3 中提取文件,并将其写入临时文件,将结果提供给用户,然后每次都销毁它,否则这不是一个好习惯。该文件是一个相当小的
.csv表。 -
为什么您不能直接从 Amazon S3 提供文件,就像您可以从内容交付网络提供引导程序或 JavaScript 一样。您会发现这种方法更具可扩展性。
标签: ruby-on-rails ruby amazon-web-services heroku amazon-s3