2012-04-06 5 views
14

Ich bin relativ neu in RoR und ich bin neugierig, warum Rails Assets mit und ohne MD5-Hash für die Produktion kompiliert?Rails kompiliert Assets sowohl mit als auch ohne MD5-Hash, warum?

Ich betreiben bundle exec rake assets:clean dann bundle exec rake assets:precompile

Meine production.rb Datei:

MyApp::Application.configure do 

    # Code is not reloaded between requests 

    config.cache_classes = true 

    # Full error reports are disabled and caching is turned on 

    config.consider_all_requests_local  = false 

    config.action_controller.perform_caching = true 

    # Disable Rails's static asset server (Apache or nginx will already do this) 

    config.serve_static_assets = false 

    # Compress JavaScripts and CSS 

    config.assets.compress = true 

    # Don't fallback to assets pipeline if a precompiled asset is missed 

    config.assets.compile = false 

    # Generate digests for assets URLs 

    config.assets.digest = true 

    config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 

    config.assets.precompile += %w(tos.js, tos.css) 

    config.i18n.fallbacks = true 

    config.active_support.deprecation = :notify 

end 

Meine Anwendung arbeitet mit Dateien mit Hashes in ihrem Namen und es ist so, wie es in meinem Fall sein sollte :)

So habe ich zwei Fragen hier:

1) Warum passiert es, wenn kompiliert?

Rails kompiliert Vermögen sowohl mit als auch ohne MD5-Hash für die Produktion

2) Was sind diese Dateien (ohne Hashes) für?

Vielleicht bekomme ich nichts, also bitte könnte jemand erklären.

Antwort

14

Der Grund dafür ist, dass Sie auf die Dateien zugreifen können, ohne den MD5-Fingerabdruck zu kennen (z. B. in einer Nicht-Rails-Anwendung oder einer Datei innerhalb der Rails-App, die nicht vom Rails-Stack kompiliert oder ausgeführt wird) (zB eine 500/502-Statusfehlerseite.) In diesem Fall müssten Sie die Assets kompilieren und dann die css/js-Links in den statischen HTML-Dateien jedes Mal ändern, wenn Sie den Code aktualisieren (wodurch eine Änderung des MD5-Hashs verursacht wird).

statt Schienen produziert 2 Kopien jeder Asset-Datei, eine mit dem Fingerabdruck im Dateinamen, die andere ohne (zB anwendungs ​​731bc240b0e8dbe7f2e6783811d2151a.css und application.css). die Fingerabdrücke abgenommen Version ist offensichtlich bevorzugt (siehe 'what is fingerprinting and why should I care 'in der rails asset pipeline guide). Aber die Nicht-Digest Ed-Version gibt es als Fallback.

Als letzten Gedanken zu diesem Thema würde ich lesen Sie die folgenden Pull-Anfrage an die Schienen git Repo: https://github.com/rails/rails/pull/5379, wo sie die Vor- und Nachteile der nicht-verdauten Dateinamen diskutieren, und die Möglichkeit zu können um die Kompilierung von ihnen auszuschalten.

HTH

+0

Hallo Chris Vielen Dank für Ihre Antwort und Erklärung, ich dachte, dass ich eine Fehlkonfiguration habe, die dieses Verhalten verursacht. Wenn es so ist, wie es sein sollte, dann ist es ok für mich. Danke noch einmal. –

+1

Auf der anderen Seite der Dinge, meine Rails-Installation hat die gleiche Konfiguration wie seine, aber es ist nur kompiliert Vermögenswerte mit dem Fingerabdruck, und kompiliert die Versionen ohne den Fingerabdruck. Dies ist sehr ärgerlich für die von Chris Bailey aufgeführten Gründe. Irgendeine Idee, wie ich das beheben kann? – NudeCanalTroll

+2

@NudeCanalTroll: Sie führen keine 'Rake-Assets: Vorkompilierung: Nicht-Digest'. – jpatokal