2012-03-05 31 views
13

Tôi bắt đầu sử dụng Carrierwave và tôi phát hiện ra rằng nó lưu trữ các tệp tạm thời ở nhiều nơi tùy thuộc vào việc nó đang thử nghiệm hay trì hoãn công việc.Thư mục tạm thời của nhà cung cấp được thiết lập để tải lên/tmp thư mục

Nếu được thực hiện trong khi kiểm tra (rspec), các tệp tạm thời sẽ ở số RAILS_ROOT/uploads/tmp thư mục.

Nếu nó được thực hiện trong việc trì hoãn, các tập tin tạm thời sẽ có mặt tại RAILS_ROOT/public/uploads/tmp

Trước tiên, tôi đã suy nghĩ rằng rails_root/tmp/uploads sẽ là một nơi hợp lý hơn, hoặc thậm chí là hệ thống thư mục tạm thời.

Thứ hai, thử nghiệm khác với hoạt động bình thường có vẻ giống như một lỗi.

Có cách nào để sửa lỗi này (theo cấu hình hoặc vá khỉ) không? Và tôi có thể đưa mọi thứ vào thư mục RAILS_ROOT/tmp không?

Trả lời

19

Có tùy chọn config.cache_dir bạn có thể đặt trong 'config/initializers/carrierwave.rb'. Nhưng nó liên quan đến '/ công'. Có vẻ như bạn nên làm điều đó trong những người tải lên:

class MyUploader < CarrierWave::Uploader::Base 

    def cache_dir 
    # should return path to cache dir 
    Rails.root.join 'tmp/uploads' 
    end 
end 
+0

Hoạt động như một sự quyến rũ. Lưu ý rằng bạn sẽ cần phải khởi động lại ứng dụng của bạn để điều này có hiệu lực. –

+0

Tôi cũng đã thêm 'attr_writer cache_dir' vào lớp và thay đổi hàm thành' @cache_dir || Rails.root.join 'tmp/uploads'' để cho phép ghi đè mỗi trường hợp (hữu ích cho việc cô lập các tệp thử nghiệm từ các tệp phát triển). – Leo

+0

Sự khác nhau giữa cache_dir và store_dir là gì? – Jwan622

7

Im using carrierwave 0.10.0 và Có vẻ như hành vi này đã được giải quyết. Bây giờ thiết lập cache_dir chấp nhận một con đường mà nằm ngoài thư mục công cộng:

CarrierWave.configure do |config| 
    config.cache_dir = Rails.root.join 'tmp/uploads' 
end 
1

@ câu trả lời iKindred của làm việc cho tôi, nhưng tôi nghĩ rằng tôi muốn mở rộng về cách tôi đã nhận nó làm việc on Rails 4.2.3 với CarrierWave 0.10 .0:

nơi để đặt khối cấu hình

Như CarrierWave không phải là một phần của Rails, nơi tốt nhất để đặt khối cấu hình, theo đọc của tôi về Rails Guide, là một tập tin khởi tạo. Tên có thể được chọn tùy ý, nhưng nó cần phải nằm trong Rails.root/config/initializers. Tôi đã chọn đặt tên tệp sau mô-đun mà tôi đã định cấu hình: Rails.root/config/initializers/carrier_wave.rb.

gì để đưa vào các tập tin khởi tạo

tôi thấy rằng tôi chạy thử nghiệm trong khi ứng dụng Rails của tôi đang chạy trong chế độ development. Sau khi thử nghiệm, tôi xóa tất cả các tệp bằng cách hủy liên kết đường dẫn lưu trữ như được mô tả here. Để làm việc đó mà không gây rối với các tệp được ứng dụng Rails lưu trữ ở chế độ development, đường dẫn lưu trữ cần phải được phân tách bằng môi trường! Do đó, phiên bản sửa đổi của tôi về câu trả lời của @ iKindred là:

#config/initializers/carrier_wave.rb 
CarrierWave.configure do |config| 
    config.cache_dir = File.join(Rails.root, 'tmp', 'uploads', Rails.env) 
end 
Các vấn đề liên quan