Last active
August 29, 2015 14:06
-
-
Save plcstevens/05e38da5211812716c2d to your computer and use it in GitHub Desktop.
Only pre-compile when necessary
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# set the locations that we will look for changed assets to determine whether to precompile | |
set :assets_dependencies, %w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb) | |
# clear the previous precompile task | |
Rake::Task["deploy:assets:precompile"].clear_actions | |
class PrecompileRequired < StandardError; end | |
namespace :deploy do | |
namespace :assets do | |
desc "Precompile assets" | |
task :precompile do | |
on roles(fetch(:assets_roles)) do | |
within release_path do | |
with rails_env: fetch(:rails_env) do | |
begin | |
# find the most recent release | |
latest_release = capture(:ls, '-xr', releases_path).split[1] | |
# precompile if this is the first deploy | |
raise PrecompileRequired unless latest_release | |
latest_release_path = releases_path.join(latest_release) | |
# precompile if the previous deploy failed to finish precompiling | |
execute(:ls, latest_release_path.join('assets_manifest_backup')) rescue raise(PrecompileRequired) | |
fetch(:assets_dependencies).each do |dep| | |
# execute raises if there is a diff | |
execute(:diff, '-Naur', release_path.join(dep), latest_release_path.join(dep)) rescue raise(PrecompileRequired) | |
end | |
info("Skipping asset precompile, no asset diff found") | |
# copy over all of the assets from the last release | |
execute(:cp, '-r', latest_release_path.join('public', fetch(:assets_prefix)), release_path.join('public', fetch(:assets_prefix))) | |
rescue PrecompileRequired | |
execute(:rake, "assets:precompile") | |
end | |
end | |
end | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment