我在/assets/images/example.svg
投放了静态资产。我在代码库中对此SVG进行了更改,并推向了生产阶段。
它没有更新,因为我设置了静态资产缓存:
config.serve_static_assets = true
config.cache_store = :redis_store, "#{ENV['OPENREDIS_URL']}/0", { expires_in: 90.minutes }
以下是资产的响应标头:
我已经运行了这个命令,它仍然没有使我的静态资产失效:
heroku run rake tmp:cache:clear assets:clean:all assets:precompile
我尝试过递增config.assets.version
,这也不起作用:
config.assets.version = '1.1'
如何处理代码库中的静态资产变化?如何为特定资产手动过期我的redis缓存,或者一般情况下?
答案 0 :(得分:1)
我要再等30分钟才能过期。据我所知,当您在heroku上提供静态资产时,您会失去指纹识别,这意味着即使您更改资产版本,缓存也不会失效。
我最近使用asset_sync gem将所有内容放在S3上。从那时起,一切都变得令人难以置信。
如果你选择走这条路线,这是配置:
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
# Enable assets
config.assets.enabled = true
# Generate digests for assets URLs
config.assets.digest = true
config.action_controller.asset_host = "//your-bucket.s3.amazonaws.com"
答案 1 :(得分:0)
在/config/environments/production.rb中,尝试设置:
config.cache_classes = true
config.serve_static_assets = true
config.assets.compile = true
config.assets.digest = true