静态资产在生产中不是最新的

时间:2013-10-03 15:38:38

标签: ruby-on-rails caching ruby-on-rails-3.2 redis

我在/assets/images/example.svg投放了静态资产。我在代码库中对此SVG进行了更改,并推向了生产阶段。

它没有更新,因为我设置了静态资产缓存:

config.serve_static_assets = true

config.cache_store = :redis_store, "#{ENV['OPENREDIS_URL']}/0", { expires_in: 90.minutes }

以下是资产的响应标头: Asset response headers

我已经运行了这个命令,它仍然没有使我的静态资产失效:

heroku run rake tmp:cache:clear assets:clean:all assets:precompile

我尝试过递增config.assets.version,这也不起作用:

config.assets.version = '1.1'

如何处理代码库中的静态资产变化?如何为特定资产手动过期我的redis缓存,或者一般情况下?

2 个答案:

答案 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