/ / o que faz o corpo = 1 fazer em trilhos 3.1 pipeline de ativos? - ruby-on-rails-3.1, asset-pipeline

o que o corpo = 1 faz nos trilhos 3.1 pipeline de ativos? - ruby-on-rails-3.1, asset-pipeline

Em desenvolvimento, todos os meus recursos de javascript estão sendo adicionados com o body=1 obter variável. O que isso está realmente fazendo?

http://localhost:3000/assets/application.js?body=1

Respostas:

32 para resposta № 1

Percorrendo o código-fonte da roda dentada, encontramos:

  # 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? é definido quando ?body=1 or true

Para um ativo estático, Asset.body é definido como:

def body
# File is read everytime to avoid memory bloat of large binary files
pathname.open("rb") { |f| f.read }
end

Considerando que passar o ativo de volta a si mesmo é um "objeto de corpo capaz de Rack"

# Add enumerator to allow `Asset` instances to be used as Rack
# compatible body objects.
def each
yield to_s
end

Quando olhamos para o bundled_asset, a Asset.body é redefinido como recuperar apenas o corpo do recurso e não incluir nenhuma dependência. Asset.to_a é definido como recuperar o próprio ativo, bem como todas as suas dependências como um array passado para o Rack.

Dessa forma, os ativos não são combinados, mas tomados como objetos individuais, portanto, os arquivos CSS individuais ainda são individuais.