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

Zer*_*oX 16 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
Run Code Online (Sandbox Code Playgroud)

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

那我怎么能解决这个问题呢.我不想在S3中存储文件.谢谢

Ben*_*nns 20

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

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

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

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

Dir.mkdir(Rails.root.join('tmp'))
Run Code Online (Sandbox Code Playgroud)

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

mkdir tmp
touch tmp/.keep
git add tmp/.keep
git commit -m "Add tmp directory to app repository."
Run Code Online (Sandbox Code Playgroud)