2013-08-31 7 views
11

W moim opóźnionego zadania, starałem się stworzyć plik tmp folderowiplik Przechowywać w katalogu tmp na Heroku Rails

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 

to działa dobrze w lokalnej ale na Heroku jest błąd w opóźnionego zadania „No taki plik lub katalog - /app/tmp/test.pdf "

Jak mogę rozwiązać ten problem. Nie chcę przechowywać pliku w S3. Dziękujemy

Odpowiedz

13

Heroku używa tak zwanego ephemeral filesystem. Oznacza to, że lokalny system plików jest dostępny tylko dla pojedynczego urządzenia, a po zatrzymaniu, ponownym uruchomieniu lub przeniesieniu, wszystkie pliki w lokalnym systemie plików zostaną zniszczone.

Jedynym sposobem przeniesienia plików do procesu zewnętrznego może być przechowywanie plików w bardziej trwałej lokalizacji. Może to być S3, baza danych, pliki Rackspace itp., Ale dla Heroku nie może to być lokalny system plików.

Jednakże, jeśli szukasz tylko do przechowywania pliku w tymczasowej lokalizacji scratch, to dobrze jest używać lokalnego systemu plików. Wygląda na to, że możesz mieć problemy, ponieważ katalog /app/tmp może nie istnieć.

warto dodać to do pracownika:

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

też dodać katalog tmp do repozytorium git.

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

Dziękuję, będę przechowywać w s3 – ZeroX