2009-11-22 5 views
13

Ich bin ein Rails Newbie, ich habe versucht herauszufinden, was los ist mit dem stylesheets_link_tag auf heroku.Warum eine Rails App auf Heroku Ressourcen über all.css und lokal über einzelne Dateien serviert

Wenn ich

= stylesheet_link_tag "style", :cache => true 

Heroku „all.css“ verwendet und nicht das Stylesheet abholen, aber wenn ich

verwenden
= stylesheet_link_tag "style", :cache => false 

dient das Stylesheet seinen Namen „Stil verwenden. css ". Warum?

Antwort

17

Dies ist das Ergebnis des Aufrufs: cache => auf Ihrem Stylesheet Link-Tag wahr.

: cache => true nimmt alle den Stylesheets zur Verfügung gestellt und verkettet sie in einer Datei mit dem Namen all.css.

Der Grund Sie sehen dies nur auf Heroku Einsatz ist, weil es die verketteten all.css nur Anrufe, wenn die Rails-Anwendung im Produktionsmodus ausgeführt wird.

So zum Beispiel sagen wir, ich habe drei Stylesheets und ich schließe sie in meinem Header:

= stylesheet_link_tag "application", "jquery-ui", "style", :cache => true 

Wenn in der Entwicklung, dies beinhaltet application.css, jquery-ui.css und style.css (in dieser Reihenfolge).

In der Produktion wird es alle CSS aus den drei Dateien (in der angegebenen Reihenfolge) in eine einzige Datei namens "all.css" verketten, die die einzige enthaltene CSS-Datei sein wird.

Der Vorteil besteht darin, dass weniger HTTP-Anforderungen in der Produktion und idealerweise eine kleinere Dateigröße für das enthaltene CSS erforderlich sind, was hoffentlich das Laden der Seite beschleunigen wird.

Bearbeiten Wie Casper in den Kommentaren hervorhebt, hat Heroku ein schreibgeschütztes Dateisystem. Sie könnten Heroku Asset Packager für eine Heroku spezifische Lösung zu suchen.

+1

Danke für die Antwort, warum irgendwelche Ideen Heroku nicht Pickup könnte das Stylesheet korrekt, wenn der Cache auf true gesetzt ist? –

+4

Heroku ist eine schreibgeschützte Bereitstellungsumgebung. Dieser Grund, Rails nicht all.css an/public/stylesheets/und nicht leise schreiben. Das stylesheet_link_tag ist immer noch mit all.css verlinkt, solange Sie cache => true verwenden, so dass die Schnellkorrektur nicht das Zwischenspeichern von Stylesheets auf Heroku ist. Lesen Sie hier mehr: http://docs.heroku.com/constraints#read-only-filesystem –

+0

Danke Casper und Bryan –

0

Rahmen: cache => true bewirkt, dass meine Anfragen geradezu zum Scheitern verurteilt.

Meine Lösung für kurzfristig ist die folgende meiner config/Umgebungen/prodcution.rb

config.serve_static_assets = true 

Ich bin etwas weniger besorgt über die Leistung hinter Cloudflare sein hinzuzufügen. Einen Weg zu finden, meine css- und js-Dateien zu verketten, befindet sich auf meiner To-Do-Liste.

1

diese getestet und es nicht für mich arbeiten (Hinzufügen config.serve_static_assets = true production.rb)

Verwandte Themen