0

我有一个静态资产在/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 缓存或一般情况下过期?

4

2 回答 2

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"
于 2013-10-03T16:50:35.553 回答
0

在 /config/environments/production.rb 中,尝试设置:

config.cache_classes = true
config.serve_static_assets = true
config.assets.compile = true
config.assets.digest = true
于 2013-10-03T16:43:55.527 回答