将文件存储在 heroku Rails 上的目录 tmp 中

Posted

技术标签:

【中文标题】将文件存储在 heroku Rails 上的目录 tmp 中【英文标题】:Store file in directory tmp on heroku Rails 【发布时间】:2013-09-04 08:46:27 【问题描述】:

在我的延迟作业中,我尝试创建一个文件到 tmp 文件夹

file_path = Rails.root.join('tmp', "#file_name." + file_extension);
exported_file = kit.to_pdf
# Save file to disk
File.open(file_path, 'wb') do |file|
      file << exported_file 
end

它在本地运行良好,但在 Heroku 上延迟作业出现错误 “没有这样的文件或目录 - /app/tmp/test.pdf”

那么我该如何解决这个问题。我不想将文件存储在 S3 中。 谢谢

【问题讨论】:

【参考方案1】:

Heroku 使用所谓的ephemeral filesystem。这意味着您的本地文件系统只能由单个测功机访问,并且一旦测功机停止、重新启动或移动,本地文件系统上的所有文件都将被销毁。

延迟作业进程将文件传输到外部进程的唯一方法是将文件存储在更永久的位置。这可能是 S3、数据库、Rackspace 文件等,但对于 Heroku,它不能是本地文件系统。

但是,如果您只是想将文件存储在临时暂存位置,则可以使用本地文件系统。看起来您可能遇到了问题,因为 /app/tmp 目录可能不存在。

尝试将此添加到您的工作人员:

Dir.mkdir(Rails.root.join('tmp'))

或者,将tmp 目录添加到您的 git 存储库。

mkdir tmp
touch tmp/.keep
git add tmp/.keep
git commit -m "Add tmp directory to app repository."

【讨论】:

谢谢,我会存储在s3中

以上是关于将文件存储在 heroku Rails 上的目录 tmp 中的主要内容,如果未能解决你的问题,请参考以下文章

Rails 6.1:Heroku 上的作业将使用 Async 而不是 Sidekiq

Heroku Dyno 上的 Django 静态文件

“bin/rails:没有这样的文件或目录”在 Heroku 上使用 Ruby 2 和 Rails 4

在 Heroku 上存储 SSH 密钥以通过 SFTP 将 Rails 应用程序连接到远程

Ruby on Rails - Heroku上的Carrierwave错误

在 Rails 中存储(结构化)配置数据的位置