2012-07-27 51 views
4

我在這找不到很多信息。沒有查詢的資產自動緩存清除?

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

+0

第二個不改變,B/C assetic使用文件名而不是內容來生成它的散列。我正在尋找同樣的東西,它看起來已經有東西構建到1.1 - https://github.com/kriswallsmith/assetic/issues/116。我會盡力讓它工作。使用versionnumbers並更新它的每一個變化很爛:( – 2013-05-19 17:42:42

回答

6

在我們的項目中,以確保新的內容將不會被光油每個部署緩存我們手動更改版本 - 資產會選擇一個。我認爲,這是一種常見的做法。但在我們的情況下 - 它將其保存在文件夾中,如web/version-1.2.3/css/all.css

我們的framework部分配置:

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

有趣的。我仍然在想我的工作流應該是什麼樣的。我應該在本地生成'version-1.2.3/css/all.css'並將其添加到我的vcs版本庫,並將它與其他任何更改一起部署?或者只生成生產服務器?我會等待查看其他人對手動更改資產版本的看法,我不習慣於必須記住要做的事情我想我可以將它添加到資源配置'php app/console assetic:dump --env = prod --no-debug'並完成這個工作。但是在每個部署中更改配置文件是另一回事。 – ChocoDeveloper 2012-07-27 06:34:32

+0

這個想法是,對於發佈,你總是改變你的應用程序的版本。資產只需選擇該參數。如果你的應用程序版本仍然沒有參數 - 你應該開始考慮它。不僅用於資產:)用於rpms名稱,用於檢查是否部署了正確的版本等等。 至於部署 - 我們所有的應用程序都有構建腳本,這些腳本可以移除測試,生成資產,進行資產轉儲等。所以最後你只提供給配置文件的rpm文件,其中包含你所有的文件。 再次 - 有應用程序版本是很好的做法 – 2012-07-27 06:48:36

+0

我最終編寫我自己的部署腳本來做到這一點,現在我知道bash = D。但是現在我有一個更基本的問題:如何使用版本進行資產轉儲資產?它似乎沒有工作。我在這裏發佈的問題:http://stackoverflow.com/questions/11895299/how-to-prepend-assets-version-to-css-and-js – ChocoDeveloper 2012-08-10 04:46:20

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 } 

此解決辦法是從緩存剋星工人的配置拉入請求:https://github.com/symfony/AsseticBundle/pull/119/files