joeswann
2/26/2014 - 4:25 PM

Local Rails 4 assets precompilation using Capistrano 3 and rsync

Local Rails 4 assets precompilation using Capistrano 3 and rsync

# Updated to work with Capistrano 3 and Rails 4; compiles assets in given stage in order
# to use settings for that stage ... rm assets when we're done

namespace :deploy do
  after :updated, "assets:precompile"
end

namespace :assets do
  desc "Precompile assets locally and then rsync to web servers"
  task :precompile do
    on roles(:web) do
      rsync_host = host.to_s # this needs to be done outside run_locally in order for host to exist
      run_locally do
        with rails_env: fetch(:stage) do
          execute :bundle, "exec rake assets:precompile"
        end
        execute "rsync -av --delete ./public/assets/ #{fetch(:user)}@#{rsync_host}:#{shared_path}/public/assets/"
        execute "rm -rf public/assets"
        # execute "rm -rf tmp/cache/assets" # in case you are not seeing changes
      end
    end
  end
end
# Speed things up by not loading Rails env
config.assets.initialize_on_precompile = false