Подтвердить что ты не робот

Хранить файл в каталоге tmp on heroku Rails

В моем Задержанном задании я попытался создать файл в папку 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 появляется ошибка в Delayed Job "Нет такого файла или каталога -/app/tmp/test.pdf"

Итак, как я могу решить эту проблему. Я не хочу хранить файл в S3. Спасибо вам

4b9b3361

Ответ 1

Heroku использует то, что называется эфемерная файловая система. Это означает, что ваша локальная файловая система доступна только для одного динамика, и как только dyno остановлен, перезапущен или перемещен, все файлы в локальной файловой системе будут уничтожены.

Единственный способ для вашего процесса Delayed Job передать файлы внешнему процессу - хранить файлы в более постоянном месте. Это может быть S3, база данных, Rackspace Files и т.д., Но для 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."