In medium-sized to large Rails applications, asset compilation can take several minutes. In order to speed up deployment, asset precompilation can be skipped. This card automates the process.
Capistrano 3
namespace :deploy do
  
  desc 'Automatically skip asset compile if possible'
  task :auto_skip_assets do
    asset_locations = %r(^(Gemfile\.lock|app/assets|lib/assets|vendor/asset))
    revisions = []
    on roles :app do
      within current_path do
        revisions << capture(:cat, 'REVISION').strip
      end
    end
    # Never skip asset compile when servers are running on different code
    next if revisions.uniq.length > 1
    changed_files = `git diff --name-only #{revisions.first}`.split
    if changed_files.grep(asset_locations).none?
      puts Airbrussh::Colors.green('** Assets have not changed since last deploy.')
      invoke 'deploy:skip_assets'
    end
  end
  desc 'Skip asset compile'
  task :skip_assets do
    puts Airbrussh::Colors.yellow('** Skipping asset compile.')
    Rake::Task['deploy:assets:precompile'].clear_actions
  end
end
To use this for all stages, add this line to your Capfile:
before 'deploy:starting', 'deploy:auto_skip_assets'
I have been using this in production successfully. To activate it for staging only, put that line into config/deploy/staging.rb instead.
Note that skip_assets is a separate task, so you'll still be able to skip assets manually.
Posted by Dominik Schöler to makandra dev (2018-05-16 13:47)