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

时间:2013-08-31 21:19:52

标签: ruby-on-rails file heroku delayed-job tmp

在我的延迟工作中,我尝试创建一个文件到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 个答案:

答案 0 :(得分:19)

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

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