lib/capistrano/tasks/faster_assets.rake in capistrano-faster-assets-1.0.2 vs lib/capistrano/tasks/faster_assets.rake in capistrano-faster-assets-1.1.0

- old
+ new

@@ -15,11 +15,11 @@ 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 + # 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 @@ -27,23 +27,44 @@ # 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| - release = release_path.join(dep) - latest = latest_release_path.join(dep) - - # skip if both directories/files do not exist - next if [release, latest].map{|d| test "[ -e #{d} ]"}.uniq == [false] - + release = release_path.join(dep) + latest = latest_release_path.join(dep) + + # skip if both directories/files do not exist + next if [release, latest].map{|d| test "[ -e #{d} ]"}.uniq == [false] + # execute raises if there is a diff execute(:diff, '-Nqr', release, latest) 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))) + release_asset_path = release_path.join('public', fetch(:assets_prefix)) + # skip if assets directory is symlink + begin + execute(:test, '-L', release_asset_path.to_s) + rescue + execute(:cp, '-r', latest_release_path.join('public', fetch(:assets_prefix)), release_asset_path.parent) + end + + # check that the manifest has been created correctly, if not + # trigger a precompile + begin + # Support sprockets 2 + execute(:ls, release_asset_path.join('manifest*')) + rescue + begin + # Support sprockets 3 + execute(:ls, release_asset_path.join('.sprockets-manifest*')) + rescue + raise(PrecompileRequired) + end + end + rescue PrecompileRequired execute(:rake, "assets:precompile") end end end