2012-07-10 8 views

Respuesta

5

Corto: No se puede.

Durante la precompilación, Rails recorre el archivo Application.js y fusiona todas las importaciones en una, por lo que simplemente no es posible cambiar un archivo debido a la compresión que se produce allí. (No hace nada con los archivos no referenciados desde application.js)

Siguiente: No debería tener que ejecutar activos de rake: precompile durante el desarrollo cuando realice correcciones rápidas. Solo en la implementación donde (dependiendo de su paciencia) no debería haber ningún problema para que la tarea se ejecute durante 5 minutos.

Debe utilizar el entorno de desarrollo durante el desarrollo donde la precompilación de activos no es necesaria porque Rails servirá los activos sin fusionar y sin minificar. Si está ejecutando los rieles construir en el servidor web a través rails s esto debería ser por defecto, pero se puede empezar de forma explícita el servidor raíles usando:

rails s RAILS_ENV=development

Si los activos aún no se muestran correctamente o si aparece errores asegúrese de tener config.assets.debug = true

+0

cómo evitar la necesidad de ejecutar activos de rake: precompilación? – Paul

5

@Tigraine es parcialmente correcto. Rails 3.1+ activos están destinados a ser administrados completamente por Rails y de forma predeterminada todos los activos se compilarán en un recurso js y uno css.

Sin embargo ...

Compilación abajo a un solo activo se basa en el uso de un manifiesto de los activos (application.js y application.css) que es procesado por la gema ruedas dentadas. Por defecto, estos manifiestos incluyen una directiva require_tree y es esa directiva la que incluye todos los archivos. Si elimina esa directiva, debe hacer un poco más de trabajo para compilar sus activos.

Si desea crear elementos separados, puede establecer una opción de configuración en application.rb.

config.assets.precompile += %w(additional/asset.css funky/stuff.js) 

La línea anterior se sumaría los archivos adicionales/asset.css y cobardes/stuff.js a la lista de archivos que se producirían cuando se precompilan los activos (Tenga en cuenta que el signo '+ =' es siendo utilizado para extender la lista por defecto). Para ser lo más explícito posible, esto significa que tendrá precompilados cuatro activos: application.js, funky/stuff.js, application.css y additional/asset.css.

Dicho esto, es posible que desee comprobar the guard-rails-assets gema. La gema es flexible en la forma en que admite la precompilación; precompilar solo los activos modificados es posible. He escuchado algunos buenos comentarios al respecto, pero no lo he usado yo.

+0

Gracias, eso resolvió mi problema con RefineryCMS que no usa application.js. http://stackoverflow.com/q/24023256/148844 – Chloe

3

@Tigraine no es correcto.

Es posible, solo tiene que crear carpetas y poner los archivos css en ellos e importarlo a diferentes archivos en la carpeta de activos.

Como

application.css 
*= require_self 
*= require foundation_and_overrides 
*= require reset 
*= require_tree ./screen 

Cuando la pantalla es una carpeta que he puesto dentro de la carpeta de estilos. como assets/stylesheets/screen/. Me llamo el application.css con

<%= stylesheet_link_tag "application", media: "screen, projection" %> 

Ahora, si desea crear un único archivo CSS para otro diseño se crea que bajo assets/stylesheets

Como xxx.css

Si necesita varios archivos para xxx se siguen los mismos pasos que el anterior pero lo importante aquí es que se agrega esta línea a

production.rb

config.assets.precompile += %w(xxx.css) 

A continuación, dentro de la presentación que añadir:

<%= stylesheet_link_tag "xxx", media: "screen, projection" %> 
+0

Cómo usar config.assets.precompile si tiene scss involucrado. También se requiere una ruta de carpeta, ¿dónde está buscando? Tenemos un css específico de correo electrónico que no queremos que se incluya en application.css como sus estilos solo para todos los correos electrónicos. Tenemos un email.css.scss en la carpeta ~/app/assets/stylesheets/usando Rails 3.2 y canalización de activos. Tenemos la configuración de precompilación y cdn para producción. Traté de agregar esta línea, sin embargo, no funcionó, no compilé el correo electrónico. También parece que capistrano solo está compilando activos en máquinas web, pero los correos electrónicos se ejecutan en máquinas de trabajadores de trabajos retrasados ​​... – bjm88

12

Si quería precompilar un solo archivo, usted podría hacer una tarea rake costumbre de hacerlo bastante fácil.

namespace :assets do 

    desc "compile one js file" 

    task :compile_one_file => :environment do 
    dest = "#{Rails.root}/vendor/assets/javascripts/compiled/" 
    js_asset = "your_jsfile.js" 
    File.write(dest + js_asset, Uglifier.compile(Rails.application.assets.find_asset(js_asset).to_s)) 
    end 

end 

luego desde la línea de comandos

rake assets:compile_one_file 

Espero que esto ayude, creo que este útil para los archivos js proveedores que no cambian a menudo como jQuery y jQuery plugins. De esa forma, cuando estoy en desarrollo, acelero las cargas de mi página evitando que la cartera de activos tenga que encaminar todas las solicitudes por separado para los archivos de mi proveedor. Solo sirve un archivo js minificado de todos mis proveedores js.

+0

obtengo Uglifier constante sin inicializar – bjm88

+0

, necesitaría instalar la gema, y ​​luego requerirla en su archivo de rake para usa la biblioteca de Uglifier –

2

Puede hacer esto completamente sin rieles. Esto puede hacer que las cosas funcionen más rápido dependiendo de su entorno.

quick_compile.rb

require 'sprockets' 

sprocket = Sprockets::Environment.new 
sprocket.js_compressor = :uglifier # or read off config yml 
sprocket.append_path('app/assets/javascripts') # the directory that holds you js src. 

file = File.new('test_min.js','w+') # the output file path. 
file.puts(sprocket.find_asset('test.js')) # the file to complie 
file.close 

Si lo que desea es la evalute // = requerirá declaración, se puede quitar la configuración js_compressor. Sprocket concatenará los archivos requeridos.

Cuestiones relacionadas