Defect #24617 ยป 0001-Adds-asset_id-parameters-to-assets.patch
config/initializers/10-patches.rb | ||
---|---|---|
187 | 187 |
end |
188 | 188 |
end |
189 | 189 |
end |
190 | ||
191 |
# Adds asset_id parameters to assets like Rails 3 to invalidate caches in browser |
|
192 |
module ActionView |
|
193 |
module Helpers |
|
194 |
module AssetUrlHelper |
|
195 |
@@cache_asset_timestamps = Rails.env.production? |
|
196 |
@@asset_timestamps_cache = {} |
|
197 |
@@asset_timestamps_cache_guard = Mutex.new |
|
198 | ||
199 |
def asset_path_with_asset_id(source, options = {}) |
|
200 |
asset_id = rails_asset_id(source, options) |
|
201 |
unless asset_id.blank? |
|
202 |
source += "?#{asset_id}" |
|
203 |
end |
|
204 |
asset_path(source, options) |
|
205 |
end |
|
206 |
alias :path_to_asset :asset_path_with_asset_id |
|
207 | ||
208 |
def rails_asset_id(source, options = {}) |
|
209 |
if asset_id = ENV["RAILS_ASSET_ID"] |
|
210 |
asset_id |
|
211 |
else |
|
212 |
if @@cache_asset_timestamps && (asset_id = @@asset_timestamps_cache[source]) |
|
213 |
asset_id |
|
214 |
else |
|
215 |
extname = compute_asset_extname(source, options) |
|
216 |
path = File.join(Rails.public_path, "#{source}#{extname}") |
|
217 |
exist = false |
|
218 |
if File.exist? path |
|
219 |
exist = true |
|
220 |
else |
|
221 |
path = File.join(Rails.public_path, compute_asset_path("#{source}#{extname}", options)) |
|
222 |
if File.exist? path |
|
223 |
exist = true |
|
224 |
end |
|
225 |
end |
|
226 |
asset_id = exist ? File.mtime(path).to_i.to_s : '' |
|
227 | ||
228 |
if @@cache_asset_timestamps |
|
229 |
@@asset_timestamps_cache_guard.synchronize do |
|
230 |
@@asset_timestamps_cache[source] = asset_id |
|
231 |
end |
|
232 |
end |
|
233 | ||
234 |
asset_id |
|
235 |
end |
|
236 |
end |
|
237 |
end |
|
238 |
end |
|
239 |
end |
|
240 |
end |