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