2013-08-31 46 views
11

在我的延遲工作,我試圖創建一個文件,以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中存儲文件。 謝謝

回答

13

Heroku使用所謂的ephemeral filesystem。這意味着您的本地文件系統只能通過一個dyno訪問,一旦dyno停止,重新啓動或移動,本地文件系統上的所有文件都將被銷燬。

延遲作業進程將文件傳輸到外部進程的唯一方法是將文件存儲在更持久的位置。這可能是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." 
+0

謝謝,我會在s3中存儲 – ZeroX