Pregunta ¿qué hace? body = 1 do it en carriles 3.1 pipeline de activos?


En desarrollo, todos mis activos de JavaScript se agregan al body=1 obtener variable. ¿Qué está haciendo esto realmente?

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

32
2017-09-28 13:10


origen


Respuestas:


Navegando a través del código fuente de Sprocket 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? se establece cuando ?body=1 or true

Para un activo estático, Asset.body Se define como:

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

Mientras que restituir el activo a sí mismo es un "objeto corporal apto para rack"

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

Cuando miramos el bundled_asset, el Asset.body se redefine como recuperar el cuerpo del activo únicamente y sin incluir ninguna dependencia. Asset.to_a se define como recuperar el activo en sí mismo y todas sus dependencias como una matriz transferida a Rack.

De esta forma, los activos no se combinan entre sí sino que se toman como objetos individuales, por lo que los archivos CSS individuales siguen siendo individuales.


32
2017-09-28 14:27