当使用ActiveStorage在Safari浏览器中缓存附件时,可以通过以下代码示例解决:
首先,在Gemfile中确保已经添加了gem 'aws-sdk-s3', require: false
,然后运行bundle install
。
在config/environments/production.rb
文件中配置S3存储选项:
config.active_storage.service = :amazon
config.active_storage.service_urls_expire_in = 1.hour # 可选的,配置URL的过期时间
config/storage.yml
文件中添加S3存储服务的配置:amazon:
service: S3
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
region: <%= ENV['AWS_REGION'] %>
bucket: <%= ENV['AWS_BUCKET'] %>
config/initializers/s3.rb
的文件,并添加以下代码:require 'aws-sdk-s3'
Aws.config.update({
region: ENV['AWS_REGION'],
credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
})
S3_BUCKET = Aws::S3::Resource.new.bucket(ENV['AWS_BUCKET'])
<%= image_tag @attachment.variant(resize_to_limit: [300, 300]).processed.service_url(expires_in: 1.hour) %>
这样,附件在Safari浏览器中将被正确缓存,并且URL将在1小时后过期。请确保在环境变量中设置了正确的AWS访问密钥和桶名称。