32
在開發過程中,我的所有javascript資源都附加了body=1
變量。這究竟是在做什麼?什麼?body = 1在rails 3.1資產管道中做什麼?
http://localhost:3000/assets/application.js?body=1
在開發過程中,我的所有javascript資源都附加了body=1
變量。這究竟是在做什麼?什麼?body = 1在rails 3.1資產管道中做什麼?
http://localhost:3000/assets/application.js?body=1
通過鏈輪源代碼拖網,我們發現:
# Returns a 200 OK response tuple
def ok_response(asset, env)
if body_only?(env)
[ 200, headers(env, asset, Rack::Utils.bytesize(asset.body)), [asset.body] ]
else
[ 200, headers(env, asset, asset.length), asset ]
end
end
body_only?
時設置?body=1 or true
對於靜態資產,Asset.body
被定義爲:
def body
# File is read everytime to avoid memory bloat of large binary files
pathname.open('rb') { |f| f.read }
end
而將資產交還給自己一個「機架能夠體對象」
# Add enumerator to allow `Asset` instances to be used as Rack
# compatible body objects.
def each
yield to_s
end
當我們看bundled_asset
,該Asset.body
被重新定義爲獲取資產僅不包括任何依賴的身體。 Asset.to_a
被定義爲將資產及其所有依賴項作爲傳遞到Rack的數組進行檢索。
通過這種方式,資產沒有組合在一起,而是作爲單獨的對象,因此單個CSS文件仍然是單獨的。