2009-11-22 9 views
13

Jestem początkującym railsiem, próbowałem dowiedzieć się, co dzieje się z stylesheets_link_tag na heroku.Dlaczego aplikacja szyny na Heroku udostępnia zasoby przez all.css i lokalnie za pomocą pojedynczych plików

Jeśli używam

= stylesheet_link_tag "style", :cache => true 

Heroku używa "all.css" i nie odebrać stylów, ale jeśli mogę użyć

= stylesheet_link_tag "style", :cache => false 

służy stylów przy użyciu jego nazwy „styl. css ". Czemu?

Odpowiedz

17

Jest to wynik wywołania: cache => true w tagu odnośnika arkusza stylów.

: cache => true pobiera wszystkie dostarczone arkusze stylów i łączy je w jeden plik o nazwie all.css.

Powodem, dla którego widzisz to tylko w twoim wdrożeniu Heroku, jest to, że wywołuje on połączone all.css tylko wtedy, gdy aplikacja Railsowa działa w trybie produkcyjnym.

Tak na przykład powiedzmy mam trzy arkusze stylów i uwzględnić je w swoim nagłówku:

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

Kiedy w rozwoju, będzie to obejmować application.css, jQuery ui.css i style.css (w tej kolejności).

Podczas produkcji będzie łączyć wszystkie pliki CSS z trzech plików (w podanej kolejności) w jeden plik o nazwie "all.css", który będzie jedynym plikiem CSS.

Zaletą jest mniejsza liczba żądań HTTP w produkcji i idealnie mniejszy rozmiar dla dołączonego CSS, co powinno, mam nadzieję, przyspieszyć ładowanie strony.

Edycja Jak zaznacza Casper w komentarzach, Heroku ma system plików tylko do odczytu. Możesz zajrzeć do Heroku Asset Packager dla rozwiązania specyficznego dla Heroku.

+1

Dzięki za odpowiedź, jakieś pomysły dlaczego Heroku nie może pickup arkusz stylów poprawnie, gdy pamięć podręczna jest ustawiona na true? –

+4

Heroku jest środowiskiem wdrażania tylko do odczytu. Z tego powodu, Railsy nie mogą pisać all.css do/public/stylesheets/i nie działają po cichu. Tag stylesheet_link_tag nadal łączy się z all.css, o ile używasz cache => true, więc szybka korekta nie polega na buforowaniu arkuszy stylów na Heroku. Przeczytaj więcej tutaj: http://docs.heroku.com/constraints#read-only-filesystem –

+0

Dzięki Casper and Bryan –

0

Ustawienie: cache => true powoduje, że moje wnioski o niepowodzenie są natychmiastowe.

Moje rozwiązanie na krótką metę jest dodanie następujących do mojego config/środowiskach/prodcution.rb

config.serve_static_assets = true 

jestem nieco mniej zaniepokojeni wydajność w tyle Cloudflare. Znalezienie sposobu obsługi moich plików css i js połączonych jest na mojej liście rzeczy do zrobienia.

1

przetestowane i to nie działa dla mnie (dodawanie config.serve_static_assets = true do production.rb)