【问题标题】:Assetic automatic cache busting without query?无需查询的资产自动缓存破坏?
【发布时间】:2012-07-27 05:14:27
【问题描述】:

我找不到太多这方面的信息。

我想将所有的 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

【问题讨论】:

  • 第二个没有改变,b/cassetic 使用文件名而不是内容来生成它的哈希。我正在寻找同样的东西,看起来 1.1 - github.com/kriswallsmith/assetic/issues/116 已经内置了一些东西。我会努力让它工作。使用版本号并在每次更改时更新它很糟糕:(

标签: php symfony assetic


【解决方案1】:

在我们的项目中,为了确保 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"

【讨论】:

  • 有趣。我还在想我的工作流程应该是什么样的。我是否应该在本地生成“version-1.2.3/css/all.css”并将其添加到我的 vcs 存储库中,并将其与任何其他更改一起部署?还是只在生产服务器上生成它?我会等着看其他人对手动更改资产版本的看法,我对必须记住这样做的想法感到不舒服。我在想我可以将它添加到 capifony 配方 'php app/consoleassetic:dump --env=prod --no-debug' 并完成此操作。但是在每次部署中更改配置文件是另一回事。
  • 这个想法是,对于发布,您始终更改应用程序的版本。资产只选择该参数。如果您仍然没有应用程序版本的参数 - 您绝对应该开始考虑它。不仅用于资产 :) 用于 rpm 名称,用于检查是否部署了正确的版本等等。至于部署——我们所有的应用程序都有构建脚本,它可以删除测试、生成资产、制作资产转储等等。所以最后你只为部署者提供了包含你所有文件的 rpm 文件。再次 - 拥有应用程序版本是一种很好的做法
  • 我最终编写了自己的部署脚本来按照您的方式执行此操作,现在我知道 bash =D。但是现在我有一个更基本的问题:如何使资产转储具有版本的资产?它似乎不起作用。我在这里发布了问题:stackoverflow.com/questions/11895299/…
【解决方案2】:

我知道这是一个旧线程,但它位于 Google 的顶部,所以我认为值得更新:

您现在可以使用 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 }

这个变通方法来自缓存破坏者工作器配置的拉取请求:https://github.com/symfony/AsseticBundle/pull/119/files

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 2018-07-13
    • 2012-03-09
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2020-05-19
    相关资源
    最近更新 更多