Kết hợp Active Storage và Cloudflare CDN chỉ từ 0 đồng
Đề bài
Nếu bác nào chưa biết về Active Storage, đây là một Gem được tích hợp vào phần core của Ruby on Rails, có nhiệm vụ lo toàn bộ các vấn đề liên quan đến lưu trữ file. Active Storage tạo một địa chỉ cố định dạng xxx.xx/rails/active_storage/*
, khi truy cập link này tuỳ vào phương thức lưu trữ mà Rails sẽ redirect tiếp đến địa chỉ của file.
Các bác có thể dễ thấy nút thắt ở đây chính là mọi request đều phải đi qua rails active storage trước rồi mới được xử lí tiếp. Cháu thường sử dụng AWS S3 để lưu trữ file, như vậy user request một file lên Rails, rails lại request về S3 để generate một link và redirect người dùng đến link đấy. Khi có nhiều resources cần load, việc này trở nên thiếu hiệu quả.
Tuy nhiên, trải nghiệm với Active Storage quá đơn giản, tiện lợi và hoạt động đầy đủ tính năng khiến cháu không muốn đổi sang Paperclip hay CarrierWave. Ngoài ra cái gì đang hoạt động thì tốt nhất không nên động vào =]]
Bắt đầu công chuyện
Bước 1: Mở Dashboard Cloudflare, vào mục Rules
Các bác tạo Rule mới Create Page Rule
và config như sau (cái này các bác tự cân đối cho phù hợp nhé)
Địa chỉ: <domain>/rails/active_storage/*
Browser Cache TTL: A month
Cache Level: Cache Everything
Edge Cache TTL: 3 month
Bước 2: Tăng Expire Time hoặc mở public Bucket
Nếu không các bác sẽ bị cache các link đã hết hạn, người dùng sẽ load lỗi. Thêm dòng public: true
vào trong file storage.yml
Bước 3: Chỉnh sửa quyền public cho các files đã có trong Bucket
Các bác mở Bucket -> Permission -> Edit
Và bỏ chọn ở mục Block all public access
Sau đó quay lại bucket và mở public cho các file cũ