2011-10-05 18 views
12

Pracuję nad aplikacją Rails 3.1. Stworzyłem plik application.css.scss.erb. .erb jest w końcu, ponieważ chcę, aby załadować zmienną z pliku konfiguracyjnego jako zmienną kolorów w CSS:Cache w Asset Pipeline Cacheing?

$highlight1: #<%= COLOR.highlight1 %>; 
$highlight2: #<%= COLOR.highlight2 %>; 

wszystko działa poprawnie, ale problem mam jest, że ilekroć zmienić wartość wewnątrz COLOR.highlight1, to nie odzwierciedla zmiany, dopóki nie wejdę do mojego pliku css i nie zmieniam czegoś (zwykle dodaję spacje i zapiszę). To jest, gdy widzę zmianę. Wyraźnie szyny szukają, czy plik został zmieniony w celu aktualizacji zmiany.

Czy jest jakiś sposób, który przynajmniej w fazie rozwoju może zostać wyłączony i mogę zobaczyć zmiany bez konieczności modyfikowania pliku css?

Każda krytyka/opinie na temat mojej techniki są również mile widziane

+0

Z ciekawości, dlaczego trzeba przechowywać to w stałym? – nfm

+0

Właściwie, musiałem dołączyć do Twittera Bootstrap, który potrzebuje MNIEJ. Tak długa historia, chciałem jedno miejsce, w którym zadeklarowałbym kolor, a następnie użyłbym tego koloru w deklarowaniu wartości w SASS (który jest używany przez moją aplikację) i trochę LESS (na czym działa Twitter Bootstrap) . Ma sens? – alik

+0

Próbujesz użyć strażnika, aby obejrzeć plik z ruby ​​i wymusić aktualizację sass - http://railscasts.com/episodes/264-guard – house9

Odpowiedz

0

może spróbować:

config.assets.digest = true 

w pliku konfiguracyjnym rozwoju

+0

hmm, które nie zadziałało – alik

7

koronek dyrektywa depend_on służy do deklarowania tego rodzaju zależności. Więc na początku pliku css.scss.erb, z innych dyrektyw (wymaga i przyjaciół), umieścić coś takiego:

//= depend_on "/path/to/colors.rb" 

wtedy, gdy plik /path/to/colors.rb zmiany, zmusi css zaktualizować też.

Niestety, nigdy nie dostał tę pracę z względną ścieżkę do pliku poza jednego z katalogów aktywów (JavaScripts/stylów/images), więc nie może być coś w sposobie Sprockets postanawia ścieżek, które zapobiega to , albo coś mi brakuje. Pozostawia to opcje określenia bezwzględnej ścieżki, która prawie na pewno nie zadziała we wszystkich środowiskach aplikacji lub umieszczenia pliku stałych w katalogach zasobów (na przykład app/assets/stylesheets/colors.rb).

Dla porównania, tutaj jest doc do dyrektywy z koronek depend_on (2.0.3) źródłowej, zębatek/directive_processor.rb

# Allows you to state a dependency on a file without 
    # including it. 
    # 
    # This is used for caching purposes. Any changes made to 
    # the dependency file will invalidate the cache of the 
    # source file. 
    # 
    # This is useful if you are using ERB and File.read to pull 
    # in contents from another file. 
    # 
    #  //= depend_on "foo.png" 
    # 

Jeśli ktoś zna sposób określić względnych ścieżek do innych miejsc jak konfiguracja/inicjalizatory czy coś takiego, proszę dać mi znać!

+1

Zobacz [odpowiedź poniżej] (http://stackoverflow.com/a/10596268/235855) jeśli chcesz użyć ścieżek względnych. –

0

http://guides.rubyonrails.org/configuring.html

  • config.assets.compile jest logiczna, które można wykorzystać, aby włączyć żywo kompilacji zębatkami w produkcji.

chcieć spróbować, że nie jestem pewien, czy robi się kompilowane w czasie rzeczywistym chociaż, przynajmniej powinien on wyłączyć buforowanie.

3

Oprócz odpowiedzi Davida Fabera. Potrzebowałem również ścieżek względnych.

chciałem wygenerować plik js ze słownika lokalizacji, która będzie aktualizować, jeśli pliki zostały zmienione locale:

//= depend_on "../../../config/locales/en.yml" 
//= depend_on "../../../config/locales/ja.yml" 

var locales = <%= locales.to_json %>; 

Okazuje się, że obecnie (Rails 3.2.3) względem ścieżki działa tylko wtedy, gdy względna ścieżka znajduje się również na ścieżce aktywów!

Tak brzydkie rozwiązaniem jest dodanie ścieżki w config/application.rb:

config.assets.paths.unshift Rails.root.join("config", "locales").to_s 
0

próbuję to, że działa

w environment.rb

config.autoload_paths += %W(#{config.root}/lib/assets_variables) 
config.assets.paths << File.join(Rails.root, 'lib', 'assets_variables') 

w lib/assets_variables/kolor .rb

module Color 
    def self.default 
    'blue' 
    end 
end 

w app/assets/stylów/color.css.scss.erb

//= depend_on "color.rb" 
$default_color: <%= Color::default %>; 
.content { 
    color: $default_color; 
} 
Powiązane problemy