Paperclip Fingerprint
Tình huống của hôm nay là Sếp bỗng dưng muốn chuyển tất cả assets của ứng dụng từ Amazon S3 về VCCloud CDN (đang khuyến mãi gói 100 GB miễn phí, giá tính ra không đắt hơn Amazon S3 nhiều lắm và được khoản Servers đặt ở Hà Nội - Đà Nẵng - Hồ Chí Minh nên thích hợp cho App có lượng lớn truy cập từ VN.)
Sử dụng CDN của VCCloud cũng đơn giản, chẳng phải setup nhiều, chỉ add domain của S3 Bucket vào là chạy được ngay (Enable Static Web Hosting cho Bucket S3 để có sub-domain riêng). Nhưng đẻ ra một vấn đề là trước đây, dùng Paperclip để upload users’s file lên S3 mà không có fingerprint, giờ mà dùng CDN thì hỏng bét, nếu file ở S3 có thay đổi thì CDN vẫn serve file cũ. »> Enable Fingerprint vào tên file cho Paperclip
1 . Tạo Migration cho tất cả các cột có sử dụng Paperclip handle attachment
class AddAvatarFingerPrintToUsers < ActiveRecord::Migration
def change
add_column :users, :avatar_fingerprint, :string
end
end
2 . Thêm Fingerprint vào tên file (đây là ví dụ cho trường hợp của mình)
config/initializers/paperclip.rb
Paperclip::Attachment.default_options.merge! {
:path => ":class/:attachment/:id_:style_:fingerprint.:extension"
}
Xong bước này thì tất cả file mới upload sau này đều có fingerprint.
3 . Xử lý file đã upload trước đây bằng cách chạy rake sau:
RAILS_ENV=production rake paperclip:refresh CLASS=model_name
3b . Nếu không muốn chạy Rake trên thì có thể xử lý thủ công bằng:
users_to_reprocess.each do |user|
user.avatar.reprocess!
end
viphat@13-05-2016