2013-08-31 28 views
11

Trong công việc bị trì hoãn của tôi, tôi đã cố gắng để tạo ra một tập tin để tmp thư mụcLưu trữ tập tin trong tmp thư mục trên 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 

Nó hoạt động tốt trong địa phương nhưng trên Heroku có một lỗi trong hoãn việc "Không tệp hoặc thư mục đó - /app/tmp/test.pdf "

Vậy làm thế nào tôi có thể giải quyết vấn đề này. Tôi không muốn lưu tập tin trong S3. Cảm ơn bạn

Trả lời

13

Heroku sử dụng thứ được gọi là ephemeral filesystem. Điều này có nghĩa rằng hệ thống tập tin cục bộ của bạn chỉ có thể truy cập vào một dyno đơn, và một khi dyno được dừng lại, khởi động lại, hoặc di chuyển, tất cả các tệp trên hệ thống tệp cục bộ sẽ bị hủy.

Cách duy nhất để quy trình Công việc bị trì hoãn của bạn chuyển tệp sang quy trình bên ngoài sẽ là lưu trữ tệp ở vị trí cố định hơn. Đây có thể là S3, một cơ sở dữ liệu, Rackspace Files, vv, nhưng đối với Heroku nó không thể là hệ thống tập tin cục bộ.

Tuy nhiên, nếu bạn chỉ đang tìm cách lưu trữ tệp ở vị trí đầu tạm thời, bạn nên sử dụng hệ thống tệp cục bộ. Dường như bạn có thể gặp sự cố vì thư mục /app/tmp có thể không tồn tại.

Hãy thử thêm này để nhân viên của bạn:

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

Hoặc, thêm thư mục tmp để kho git của bạn.

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

Cảm ơn bạn, tôi sẽ lưu trữ trong s3 – ZeroX

Các vấn đề liên quan