在Heroku中创建临时文件

Sat*_*uri 24 ruby-on-rails heroku

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

mu *_*ort 47

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

Aspen&Bamboo
[...]
有两个可写的目录:./tmp./log(在你的应用程序根目录下).
[...]

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

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

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

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


感谢本杰明·惠勒的抬起头对RAILS_ROOTRails.root改变.


Tur*_*adg 15

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

prefix = 'mydata'
suffix = '.xml'
Tempfile.new [prefix, suffix], "#{Rails.root}/tmp"
Run Code Online (Sandbox Code Playgroud)

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

  • 说:Rails.root.join('tmp')不会有什么坏处 (6认同)