2011-10-05 7 views
12

Sto lavorando a un'applicazione Rails 3.1. Ho creato un file application.css.scss.erb. Il .erb è alla fine perché voglio caricare una variabile dal file di configurazione come variabile colore nel css:Asset Pipeline Cacheing CSS?

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

Tutto funziona bene, ma il problema che sto avendo è che ogni volta che cambia un valore all'interno di COLOR.highlight1, non riflette la modifica finché non arrivo al mio file css e cambio qualcosa (di solito aggiungo degli spazi e lo salvo). Questo è quando vedo il cambiamento. Chiaramente le rotaie stanno cercando di vedere se il file è stato modificato per aggiornare la modifica.

C'è un modo che almeno durante lo sviluppo, questo può essere disattivato e posso vedere le modifiche senza dover modificare anche il file css?

Qualsiasi critica/pareri su mia tecnica sono i benvenuti

+0

Per curiosità, perché avete bisogno di memorizzare questo in un costante? – nfm

+0

In realtà, avevo bisogno di includere Twitter Bootstrap, che ha bisogno di meno. Quindi, per farla breve, ho voluto un unico posto dove vorrei dichiarare il colore e poi usare quel colore nel dichiarare valori in SASS (che è ciò che la mia applicazione utilizza tutto) e un po 'di meno (che è ciò che Twitter Bootstrap funziona su) . Ha senso? – alik

+0

Si tenta con la guardia di guardare il vostro file di rubino e forzare un aggiornamento sul Sass - http://railscasts.com/episodes/264-guard – house9

risposta

0

magari provare:

config.assets.digest = true 

nel file di configurazione di sviluppo

+0

hmm, che non ha funzionato – alik

7

The Sprockets direttiva depend_on consente di dichiarare questi tipi di dipendenze. Così nella parte superiore del file css.scss.erb, con le altre direttive (richiede e amici), mettere qualcosa come:

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

Poi quando il file /path/to/colors.rb modifiche, sarà costringere il css per aggiornare anche.

Purtroppo, non ho mai avuto questo lavoro con un percorso relativo a un file di fuori di uno degli indici patrimoniali (javascripts/fogli di stile/immagini) quindi non ci può essere qualcosa nel modo in cui Sprockets risolve percorsi che impedisce questo , altrimenti mi manca qualcosa. Ciò ti lascia con le opzioni di specificare un percorso assoluto, che quasi certamente non funzionerà in tutti gli ambienti delle tue app, o mettere il file delle costanti nelle tue directory degli asset (app/assets/stylesheets/colors.rb, per esempio).

Per riferimento, ecco il documento per la direttiva depend_on dalle ruote dentate (2.0.3) fonte, in ruote dentate/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" 
    # 

Se qualcuno conosce un modo per specificare i percorsi relativi ad altri luoghi come config/inizializzatori o qualcosa del genere, per favore fatemelo sapere!

+1

Sede [la risposta qui sotto] (http://stackoverflow.com/a/10596268/235855) se si desidera utilizzare i percorsi relativi. –

0

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

  • config.assets.compile è un valore booleano che può essere utilizzato per accendere vivo Pignoni compilation in produzione.

potrebbe desiderare di provare che, io non sono sicuro se la sua sempre compilato in tempo reale, però, almeno dovrebbe disattivare la memorizzazione nella cache.

3

In aggiunta alla risposta di David Faber. Avevo bisogno di usare anche i percorsi relativi.

ho voluto generare un file js con il dizionario locale, che avrebbe aggiornare se i file di localizzazione sono stati modificati:

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

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

scopre che attualmente (Rails 3.2.3) i percorsi relativi funzionano solo se la relativa il percorso è anche nel percorso delle risorse!

Quindi la soluzione brutto è per aggiungere il percorso in config/application.rb:

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

provo questo, funziona

in application.rb

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

in lib/assets_variables/colore .RB

module Color 
    def self.default 
    'blue' 
    end 
end 

in app/assets/fogli di stile/color.css.scss.erb

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