Với một hệ thống lớn cùng lượng data khổng lồ việc lưu file trực tiếp trên server có thể gặp khó khăn vì giới hạn bộ nhớ. Sử dụng dịch vụ lưu trữ tệp trực tuyến như Amazon S3 là giải pháp hữu hiệu cho vấn đề này. Và xem chúng ta có gì nào, carrierwave, một thư viện Ruby được dùng phổ biến hỗ trợ upload files một cách dễ dàng.
Đừng lo lắng nếu bro không có account AWS, hãy tham khảo bài viết dưới link này để giả lập môi trường AWS phía local nhé. Shout-out cho người thầy của tui 😗
http://blog.tomosia.com.vn/su-dung-localstack-de-gia-lap-upload-file-s3/
Ok vậy là đầy đủ đồ đạc rùi ae, chiến thôi
Trước tiên, để sử dụng những công cụ trên hãy add nó vào Gemfile nhé
gem 'carrierwave'
gem 'fog-aws'
Fog AWS được sử dụng để hỗ trợ Amazon S3. Hãy chắc chắn rằng bạn có nó trong Gemfile của mình
Và đừng quên bundle để cài đặt chúng
bundle install
Giả sử bạn đang cần upload avatar cho user
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
end
Tiếp theo hãy tạo file uploader cho nó
class AvatarUploader < CarrierWave::Uploader::Base
storage :fog
end
Để biết thêm về nhiều loại ma thuật khác như thay đổi tên file hay folder chứa, vân vân và mây mây ae có thể xem tại đây
https://github.com/carrierwaveuploader/carrierwave
Tạo file carrierwave.rb trong config/initializers và cấu hình credentials
CarrierWave.configure do |config|
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: 'S3_AWS_ACCESS_KEY_ID',
aws_secret_access_key: 'S3_AWS_SECRET_ACCESS_KEY',
region: 'us-east-1'
}
config.fog_directory = 'BUCKET_NAME'
end
There u go, giờ thì ae có thể upload file lên S3 r. Quá ư là đơn giản và dễ hiểu phải không 🐧🐧
1 comment
Zaproxy dolore alias impedit expedita quisquam.