Skip to content

Instantly share code, notes, and snippets.

@plcstevens
Last active August 29, 2015 14:06
Show Gist options
  • Select an option

  • Save plcstevens/05e38da5211812716c2d to your computer and use it in GitHub Desktop.

Select an option

Save plcstevens/05e38da5211812716c2d to your computer and use it in GitHub Desktop.

Revisions

  1. plcstevens renamed this gist Jul 30, 2015. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. Philip Stevens created this gist Sep 9, 2014.
    44 changes: 44 additions & 0 deletions gistfile1.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,44 @@
    # 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