turbo-sprockets-rails3 0.2.7 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -35,6 +35,15 @@ namespace :assets do
35
35
  end
36
36
  end
37
37
 
38
+ # Returns an array of assets recognized by config.assets.digests,
39
+ # including gzipped assets and manifests
40
+ def known_assets
41
+ assets = Rails.application.config.assets.digests.to_a.flatten.map do |asset|
42
+ [asset, "#{asset}.gz"]
43
+ end.flatten
44
+ assets + %w(manifest.yml sources_manifest.yml)
45
+ end
46
+
38
47
  desc "Compile all the assets named in config.assets.precompile"
39
48
  task :precompile do
40
49
  invoke_or_reboot_rake_task "assets:precompile:all"
@@ -61,6 +70,18 @@ namespace :assets do
61
70
  env = Rails.application.assets
62
71
  target = File.join(::Rails.public_path, config.assets.prefix)
63
72
 
73
+ # Before first compile, set the mtime of all current assets to current time.
74
+ # This time reflects the last time the assets were being used.
75
+ if digest.nil?
76
+ ::Rails.logger.debug "Updating mtimes for current assets..."
77
+ known_assets.each do |asset|
78
+ full_path = File.join(target, asset)
79
+ if File.exist?(full_path)
80
+ File.utime(Time.now, Time.now, full_path)
81
+ end
82
+ end
83
+ end
84
+
64
85
  # If processing non-digest assets, and compiled digest files are
65
86
  # present, then generate non-digest assets from existing assets.
66
87
  # It is assumed that `assets:precompile:nondigest` won't be run manually
@@ -107,26 +128,31 @@ namespace :assets do
107
128
  invoke_or_reboot_rake_task "assets:clean_expired:all"
108
129
  end
109
130
 
110
- # Remove assets that aren't referenced by manifest.yml
131
+ # Remove assets that haven't been deployed since `config.assets.expire_after` (default 1 day).
132
+ # This provides a buffer between deploys, so that older assets can still be requested.
133
+ # The precompile task updates the mtime of the current assets before compiling,
134
+ # which indicates when they were last in use.
135
+ #
136
+ # The current assets are ignored, which is faster than the alternative of
137
+ # setting their mtimes only to check them again.
111
138
  namespace :clean_expired do
112
139
  task :all => ["assets:environment"] do
113
140
  config = ::Rails.application.config
141
+ expire_after = config.assets.expire_after || 1.day
114
142
  public_asset_path = File.join(::Rails.public_path, config.assets.prefix)
115
143
 
116
- # Build an array of assets recognized by config.assets.digests,
117
- # including gzipped assets and manifests
118
- known_assets = Rails.application.config.assets.digests.to_a.flatten.map do |asset|
119
- [asset, "#{asset}.gz"]
120
- end.flatten
121
- known_assets += %w(manifest.yml sources_manifest.yml)
144
+ @known_assets = known_assets
122
145
 
123
146
  Dir.glob(File.join(public_asset_path, '**/*')).each do |asset|
124
147
  next if File.directory?(asset)
125
148
  logical_path = asset.sub("#{public_asset_path}/", '')
126
- # Delete asset if not found in known_assets
127
- unless logical_path.in?(known_assets)
128
- ::Rails.logger.debug "Removing unreferenced asset: #{logical_path}"
129
- FileUtils.rm_f asset
149
+
150
+ unless logical_path.in?(@known_assets)
151
+ # Delete asset if not used for more than expire_after seconds
152
+ if File.mtime(asset) < (Time.now - expire_after)
153
+ ::Rails.logger.debug "Removing expired asset: #{logical_path}"
154
+ FileUtils.rm_f asset
155
+ end
130
156
  end
131
157
  end
132
158
  end
@@ -1,3 +1,3 @@
1
1
  module TurboSprockets
2
- VERSION = "0.2.7"
2
+ VERSION = "0.2.8"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turbo-sprockets-rails3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -102,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
102
  version: '0'
103
103
  segments:
104
104
  - 0
105
- hash: 3166216786972106810
105
+ hash: -4077615069865876576
106
106
  required_rubygems_version: !ruby/object:Gem::Requirement
107
107
  none: false
108
108
  requirements:
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
111
  version: '0'
112
112
  segments:
113
113
  - 0
114
- hash: 3166216786972106810
114
+ hash: -4077615069865876576
115
115
  requirements: []
116
116
  rubyforge_project:
117
117
  rubygems_version: 1.8.24