12

Tôi đang sử dụng Paperclip (2.3) để xử lý tải hình ảnh lên ứng dụng Rails 3.0.3 chạy trên Ubuntu. Paperclip đang xử lý tải lên như được quảng cáo NHƯNG các tệp RackMultipart * được tạo trong thư mục/tmp của ứng dụng vẫn tồn tại - nghĩa là chúng chỉ tích lũy thay vì xóa chính chúng. Tôi nhận ra rằng tôi có thể sử dụng tmpreaper để xóa tmpfiles cũ nhưng tôi thực sự muốn tìm một giải pháp thanh lịch hơn (và khả năng mở rộng).Tại sao các tệp RackMultipart * vẫn tồn tại trong thư mục Rails/tmp của tôi?

Tôi gặp sự cố trước đó với các tệp tạm thời (ví dụ: tệp RackMultipart *) tích lũy trong thư mục gốc của ứng dụng Rails (thay vì trong/tmp). Tôi giải quyết này bằng cách thiết lập một cách rõ ràng con đường tạm thời trong file environment.rb tôi như vậy:

ENV['TMPDIR'] = Rails.root.join('tmp') 

Có một biến môi trường mà cần phải được thiết lập để đảm bảo rằng các tempfiles được xử lý đúng cách - tức là xóa khi họ đã được lưu trong mô hình? Tôi không chắc đây có phải là vấn đề với thiết lập Paperclip hoặc Rails của tôi hay không.

Tôi đã tìm kiếm cao và thấp nhưng có ít tiến bộ về điều này. Tôi rất biết ơn đối với bất kỳ khách hàng tiềm năng nào.

Xin chân thành cảm ơn.

PS - Tôi hiện đang sử dụng S3 để lưu trữ. Điều này dường như không được gắn với vấn đề mặc dù - Tôi đã có cùng một vấn đề khi tôi đã được lưu trữ các tập tin tại địa phương.

+0

Để bây giờ tôi đang xử lý các vấn đề tempfile sử dụng cron và tmpreaper. CRON chạy tmpreaper mỗi 10 phút để xóa thư mục tmp của tôi. Vẫn sẽ giống như một sửa chữa thanh lịch hơn nhưng điều này dường như đang làm việc cho bây giờ. – NAD

+0

Bạn đang sử dụng máy chủ nào? Puma có lẽ? –

+0

một chủ đề có liên quan trong nhóm devel Rack: https://groups.google.com/forum/#!searchin/rack-devel/temp/rack-devel/brK8eh-MByw/sw61oJJCGRMJ –

Trả lời

5

Tôi không biết nếu điều này là nữa tao nhã nhưng đây là những gì tôi đang làm sau khi các tập tin được lưu"

tempfile = params[:file].tempfile.path 
if File::exists?(tempfile) 
    File::delete(tempfile) 
end 
+1

Tôi thấy * hai giống hệt nhau * tạm thời các tệp được tạo, ở trên sẽ chỉ xóa một trong số chúng (https://github.com/rack/rack/issues/641) –

0

UPDATE:. Vấn đề cần được giải quyết trong rack 1.6.0.beta2 tôi thấy nó đã được sử dụng trong Rails 4.2.0.rc2

Dưới workaround phục vụ tốt cho tôi trong gần một năm.

tôi đã thêm này ở phần cuối của hành động điều khiển chấp nhận tập tin tải lên:

Thread.new { GC.start } 

Điều này kích hoạt Bộ sưu tập rác của Rack chưa sử dụng :: Yêu cầu đối tượng cũng xóa các tệp tạm thời liên quan. Lưu ý rằng nó không quét tệp tạm thời của yêu cầu hiện tại nhưng nó sẽ xóa các tệp trước đó và ngăn chúng tích lũy.

9

TempFileReaper là phần mềm trung gian được đặt giá để xử lý vấn đề này.

http://www.rubydoc.info/github/rack/rack/Rack/TempfileReaper

Bao gồm dòng này trong application.rb giải quyết vấn đề:

config.middleware.use Rack::TempfileReaper 
+1

u đã cứu mạng tôi. –

+1

Đây là câu trả lời đúng, vì các tệp tạm thời này là miền của Rack (rõ ràng là từ tên tệp của chúng).Điều này xảy ra đối với mọi hình thức tải lên nhiều phần, không chỉ khi sử dụng Paperclip. Middleware TempfileReaper đã được thêm vào Rack trong phiên bản 1.6.0 nhưng dường như không được Rails bật làm mặc định. – CMcClymont

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