32 votes

Que fait ?body=1 dans le pipeline de biens de rails 3.1 ?

Dans le cadre du développement, toutes mes ressources javascript sont ajoutées à l'aide de la balise body=1 obtenir la variable. Que fait-elle en réalité ?

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

32voto

Xorlev Points 4658

En parcourant le code source de Sprocket, nous trouvons :

  # 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? est réglé lorsque ?body=1 or true

Pour un actif statique, Asset.body est défini comme suit :

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

Tandis que le fait de rendre l'actif lui-même est un "objet de corps capable de Rack".

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

Quand on regarde le bundled_asset le Asset.body est redéfini comme récupérant le corps de la ressource uniquement et n'incluant pas les dépendances. Asset.to_a est défini comme la récupération de la ressource elle-même ainsi que de toutes ses dépendances sous forme de tableau transmis à Rack.

De cette façon, les actifs ne sont pas combinés ensemble mais considérés comme des objets individuels, de sorte que les fichiers CSS individuels restent individuels.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X