资产自动缓存破坏没有查询?

时间:2012-07-27 05:14:28

标签: php symfony assetic

我找不到太多关于此的信息。

我想将所有css(和js确实)文件编译成这样的东西:

css/all-c498dsfbc.css

现在我只能得到这些:

css/all.css
css/c498dsfbc.css
css/all.css?v=123

第一个很糟糕,因为它根本没有缓存破坏。

第二个生成可用于缓存清除的哈希,但由于某种原因,当我在.css文件中更改某些内容然后再次运行时,它不会更改:

$ php app/console assetic:dump --env=prod --no-debug

第三个也很糟糕,因为我需要手动更改版本,如下所述:http://symfony.com/doc/current/reference/configuration/framework.html#ref-framework-assets-version。另外,我认为使用查询不是一个好主意(我认为某些浏览器或CDN可能不喜欢这样)。如果文件名被更改会更好:'all-c498dsfbc.css'。如果我没记错的话,这就是在Rails中完成的。

有什么想法吗?

修改

似乎缺少此功能,我无法相信:https://github.com/kriswallsmith/assetic/pull/190

2 个答案:

答案 0 :(得分:6)

在我们的项目中,为了确保Varnish不为每个部署缓存新内容,我们手动更改版本 - 而资产选择那个。我认为,这是一种常见的做法。但在我们的情况下 - 它将其保存在web/version-1.2.3/css/all.css

等文件夹中

framework部分的配置:

    templating:
        engines: ['twig']
        assets_version: %release_version%
        assets_version_format: "version-%%2$s/%%1$s"

答案 1 :(得分:1)

我知道这是一个旧帖子,但它位于谷歌的顶端,所以我认为值得更新:

现在,您可以使用cache buster worker以资产方式执行此操作。但是2.3.0资产包没有配置,所以你现在需要手动启用它。这可以通过以下服务定义来完成:

#config.yml or a service.yml
#...
services:
    assetic.worker.cache_buster:
        class: Assetic\Factory\Worker\CacheBustingWorker
        public: false
        arguments:
            lazy_manager: @assetic.asset_manager
        tags:
            worker_factory: { name: assetic.factory_worker }

这个解决方法来自对cache cacheter worker配置的pull请求:https://github.com/symfony/AsseticBundle/pull/119/files