Here are some custom made tasks for Capistrano, which might be helpful in the Symfony2 context. First, some cache clearing tasks, that don’t clear the whole cache but only translations or the Twig template cache.
namespace :foo do
# Clear only translation cache
task :clear_translation_cache do
now = Time.now
timestamp = now.strftime("%Y%m%d%H%M%S")
run "[ -d #{latest_release}/app/cache/prod/translations ] && mv #{latest_release}/app/cache/prod/translations #{latest_release}/app/cache/prod/translations_#{timestamp} || echo 'no translation dir'"
end
# Clear only twig cache
task :clear_twig_cache do
now = Time.now
timestamp = now.strftime("%Y%m%d%H%M%S")
run "[ -d #{latest_release}/app/cache/prod/twig ] && mv #{latest_release}/app/cache/prod/twig #{latest_release}/app/cache/prod/twig_#{timestamp} || echo 'no translation dir'"
end
end
The folder is accually not removed but renamed to not interfere with current processes. The folder is then automatically rebuilt by the framework.
Symfony2 has that great “assets version” feature, which adds a parameter to the URL of all assets. Then by changing the value, you can make sure that everyone has to load the latest version from the server. If you want to update the asset version automatically on every deploy, you might use the following setup:
Add a file app/config/assets_version.yml
to your project containing:
parameters:
assets_version: AsSeTvErSiOn
Add that file to the import section of your config.yml
and use the parameter %assets_version%
in the configuration.
Call that Capistrano task in your deployment process. It replaces the assets version with a value generated from the release name. It is the hexadecimal representation of the YYMMDDHHII timestamp.
namespace :foo do
# Update asset version
task :update_version, :roles => :web, :except => { :no_release => true } do
capifony_pretty_print " --> Update assets version"
file_path = "#{release_path}/app/config/assets_version.yml"
assets_version = release_name[2, 10] # Extract YYMMDDHHII only
assets_version = assets_version.to_i.to_s(16) # Convert to int, convert to hex
capifony_pretty_print " Assets version is #{assets_version}"
run "echo 'parameters:\n assets_version: #{assets_version}' > #{file_path}"
end
end