17

在我的延迟作业中,我尝试在 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 中。谢谢

4

1 回答 1

24

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

延迟作业进程将文件传输到外部进程的唯一方法是将文件存储在更永久的位置。这可能是 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."
于 2013-08-31T21:38:45.493 回答