2011-10-05 17 views
12

Estoy trabajando en la aplicación Rails 3.1. He creado un archivo application.css.scss.erb. El .erb está en el final, porque quiero cargar una variable del archivo de configuración como la variable de color en el css:Caché de canalización de activos CSS?

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

Todo funciona bien, pero el problema que estoy teniendo es que cada vez que cambio un valor dentro de COLOR.highlight1, no refleja el cambio hasta que entre en mi archivo css y cambie algo (generalmente agrego algunos espacios y lo guardo). Eso es cuando veo el cambio. Clearly rails está buscando si el archivo fue cambiado para actualizar el cambio.

¿Hay alguna manera de que al menos durante el desarrollo, esto se puede desactivar y puedo ver los cambios sin tener que modificar también el archivo css?

Cualquier crítica/opiniones sobre mi técnica también son bienvenidos

+0

Por curiosidad, ¿por qué necesita para almacenar esto en una constante? – nfm

+0

En realidad, tenía que incluir Twitter Bootstrap, que necesita menos. Así el cuento largo, que quería un solo lugar donde los anunciara, el color y luego usar ese color en la declaración de valores de SASS (que es lo que mi aplicación utiliza a lo largo) y un poco inferior a (que es lo que funciona Twitter Bootstrap en) . ¿Tiene sentido? – alik

+0

Intenta utilizando guardia para ver el archivo de rubí y forzar una actualización sobre el Sass - http://railscasts.com/episodes/264-guard – house9

Respuesta

0

quizás tratar:

config.assets.digest = true 

en su archivo de configuración de desarrollo

+0

hmm, que no funcionó – alik

7

los piñones depend_on directiva se utiliza para declarar este tipo de dependencias. Así que en la parte superior de su archivo css.scss.erb, con las demás directivas (requiere y amigos), poner algo como:

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

Luego, cuando los archivos /path/to/colors.rb cambios, forzará el css para actualizar también.

Desafortunadamente, nunca he conseguido que esto funcione con una ruta relativa a un archivo fuera de uno de los directorios activos (javascripts/hojas de estilo/imágenes) lo que puede haber algo en la forma en Piñones resuelve las rutas que impide que este , o me estoy perdiendo algo. Esto te deja con la opción de especificar una ruta absoluta, que seguramente no funcionará en todos tus entornos de aplicaciones, o poner el archivo de constantes en tus directorios de activos (app/assets/stylesheets/colors.rb, por ejemplo).

Para referencia, aquí está el doc para la depend_on Directiva de las ruedas dentadas (2.0.3) de origen, en ruedas dentadas/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" 
    # 

Si alguien conoce una manera de especificar las rutas relativas a otros lugares como config/initializers o algo así, ¡házmelo saber!

+1

Ver [la respuesta más abajo] (http://stackoverflow.com/a/10596268/235855) si desea usar rutas relativas. –

0

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

  • config.assets.compile es un valor lógico que se puede utilizar para activar la compilación en vivo Piñones en la producción.

podría querer intentar eso, no estoy seguro de si es conseguir compilan en tiempo real, sin embargo, por lo menos debe deshabilitar el almacenamiento en caché.

3

Además de la respuesta de David Faber. Necesitaba usar rutas relativas también.

me querían para generar un archivo js con el diccionario local, lo que actualizar si se han cambiado los archivos de localización:

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

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

Resulta que en la actualidad (Rails 3.2.3) rutas relativas sólo funcionan si el pariente la ruta también está en la ruta de los activos!

Así que la solución es fea para agregar la ruta en config/application.rb:

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

de que este intento, que funcione

en application.rb

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

en lib/assets_variables/de color .rb

module Color 
    def self.default 
    'blue' 
    end 
end 

en app/activos/hojas de estilo/color.css.scss.erb

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