rinat.io


Cleaning Assets after Deploy

If you use assets for your js, css stuff in yii application, you have to re-publish it on deploy. And probably simplest way would be to delete everything under /path/to/public/www/assets. And we used to do that same way with YiiBoilerplate deployer for example. Although it isn't quite right solution:

  • If browser cached html page, the js/css tags in it still point to old directory which you deleted.
  • If you built heavy javascript application (or even single page application) which loads JS files on the fly, with require.js for example, it won't be able to find those deleted files after deploy until you refresh the page.

And you will have an errors like this in your log:

[error] [exception.CHttpException.404] exception
'CHttpException' with message 'Unable to resolve the request
"assets/c7d87fdd/js/libs/jquery/jquery.min.js".'

So, what's a solution? Best way to clean assets I found so far is to update modification time of assets directory with shell or php touch function, since CAssetManager::publish takes hash name based on path and path mtime.

Although you won't have such issues when you publish file, not directory, because modification time will be changed on content change. But modification time of directory won't be updated unless you added/deleted some files in there.

One more note: if you use some preprocessor like compass or r.js, don't forget to apply it before "touching" a directory that has to be published.