2011-09-28 13 views
22

Tengo un iframe que representa un elemento parcial y no forma parte del diseño de la aplicación principal ni de la canalización de activos.ActionView :: Template :: Error (960.css no está precompilado)

me gustaría incluir algunas hojas de estilo, sin embargo estoy recibiendo este error:

ActionView::Template::Error (960sm.css isn't precompiled): 

Rails 3.1 Heroku

Respuesta

41

Las hojas de estilo que no están incluidos en un manifiesto (directamente o por su nombre indirectamente a través de require_tree) no están precompilados, por lo que no estarán accesibles en producción.

Necesita agregar la hoja a la lista de elementos para precompilar en el entorno application.rb.

 
config.assets.precompile += ['960sm.css'] 

y luego acceder a ella en la vista:

 
stylesheet_link_tag('960sm') 
+0

Gracias por ayudarme a ordenar la cartera de activos. – hagope

+3

Funciona bien, me ayudó mucho, pero la descripción en application.css da otra idea sobre cómo funciona: .../* * Este es un archivo de manifiesto que incluirá automáticamente todas las hojas de estilo disponibles en este directorio * y cualquier subdirectorio. Puede agregar estilos de toda la aplicación a este archivo y aparecerán en el * en la parte superior del archivo compilado, pero en general es mejor crear un nuevo archivo por alcance de estilo. * = require_self * = require_tree. */ –

+0

esto me ayudó ... después de unas pocas horas de encontrar una solución – justcode

4

En lugar de administrar una lista de archivos CSS, se pueden preferir sólo tiene que ajustar la extensión mediante la adición de .scss al nombre de archivo.

Por lo tanto, 960sm.css se convertiría en 960sm.css.scss.

Esto no debería romper nada ya que el CSS válido es SCSS válido.

+1

Está bien, pero recuerde * no * para agregar .scss en la lista de precompilación. "Especifique siempre un [nombre de archivo compilado esperado que termine con .js o .css] (http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets), incluso si desea agregar archivos Sass o CoffeeScript a la precompilación. formación." – AlexChaffee

0

Si usted tiene una gran cantidad de activos independientes, a continuación, en lugar de añadir cada uno de la lista, como este

config.assets.precompile += ['960sm.css'] 

es posible que desee simplemente precompilación todo, así:

def precompile?(path) 
    %w(app lib vendor).each do |asset_root| 
    assets_path = Rails.root.join(asset_root, 'assets').to_path 
    return true if path.starts_with?(assets_path) 
    end 
    false 
end 

# Precompile all assets under app/assets (unless they start with _) 
Rails.application.config.assets.precompile << proc do |name, path| 
    starts_with_underscore = name.split('/').last.starts_with?('_') 
    unless starts_with_underscore 
    path = Rails.application.assets.resolve(name).to_path unless path # Rails 4 passes path; Rails 3 doesn't 
    precompile?(path) 
    end 
end 

(Basado en el code in the Rails Guide.)

Cuestiones relacionadas