在Heroku中创建临时文件

我有一个托管@ ​​Heroku的应用程序。 该应用程序依赖于使用套接字侦听器获取的某些提要。 套接字侦听器每秒获取一行XML。 一旦我检测到来自侦听器的文件信号结束,我就将文件上传到Amazon S3服务器。 但是,直到收到文件信号结束,是否可以将文件内容保存为Heroku中的临时文件?

您可以使用#{RAILS_ROOT}/tmp/目录或Rails.root.join('tmp').to_s

阿斯彭和竹子
[…]
有两个可写的目录: ./tmp./log (在你的应用程序根目录下)。
[…]

雪松
Cedar提供了一个短暂的可写文件系统。 您可以随意写入磁盘。 在dyno restart和spin-up中你的更改将会丢失。

RAILS_ROOT适用于较旧的Rails版本, Rails.root适用于较新版本。

当然,你不能依赖任何幸存的请求,也不能保证你甚至可以使用相同的dyno。

只要您保持在同一进程或请求中, Rails.root.join('tmp')应该可用。 如果您需要临时数据在请求或进程中生存,那么最好使用其他东西(例如MongoDB或PostgreSQL)作为数据收集到S3的途径。


感谢Benjamin Wheeler关于RAILS_ROOTRails.root变化的提示。

Heroku的只读文件系统上的文档说明您可以使用#{RAILS_ROOT}/tmp但不提供任何生成临时文件名的示例。 这将保证文件名的唯一性:

 prefix = 'mydata' suffix = '.xml' Tempfile.new [prefix, suffix], "#{Rails.root}/tmp" 

请注意,“无法保证此文件将在后续请求中存在(尽管可能存在),因此不应将其用于任何类型的永久存储。”