2011-12-09 10 views
6

Estoy tratando de hacer que esto funcione, pero me está volviendo loco. Ya puse esto enAgregar proveedor/activos/javascripts a mi ruta válida de activos

application.rb

config.assets.paths << Rails.root.join("vendor", "assets", "javascripts").to_s 

(.to_s porque devuelve un objeto mientras Quiero una cadena de aquí). No puedo encontrar la solución y me está volviendo loco, porque el directorio de hojas de estilo en el proveedor funciona, pero javascripts no lo es.

¿Cómo puedo hacer esto?

error devuelto:

<h1>Routing Error</h1> 
<p><pre>No route matches [GET] &quot;/assets/ext-all-debug.js&quot;</pre></p> 

Respuesta

5

Creo proveedor ya está incluido en la ruta de los activos, comprobar el uso de la consola de rieles

rails console 
Rails.application.config.assets.paths.each do |path|; puts path; end 

Sin embargo la cosa más fácil podría ser este

  • puesto ext en app/activos/javascript/lib
  • require_tree se cargue ya sea explícita o

aplicación licación.js

//= require ./lib/ext-all-debug.js 

Si realmente queremos que los proveedores de tecnología

  • crear dir vendedor/activos/javascript/ext
  • crear archivo de manifiesto proveedor/activos/javascript/ext/index.js
  • poner ext-all-debug.js en vendedor/activos/javascript/ext/

código para index.js

código
//= require ./ext-all-debug.js 

para application.js

//= require ext 

que es el nombre del directorio que el archivo de manifiesto índice se encuentra

reinicie el servidor de rieles

si no desea cargar extjs mediante application.js, es decir, desea incluir extjs lib solo en páginas específicas

<%= javascript_include_tag "ext" %> 
0

No es fácil ver el problema de la información que ha proporcionado, ya que creo que el problema está en otra parte.

El objetivo de la canalización de activos es poner todas las javascripts en un solo archivo. Y ese archivo está incluido en el documento HTML. Entonces la clave es ese gran archivo JS. Bueno, puede ser más complicado, pero creo que ese no es necesariamente tu caso.

Así por ejemplo, en el diseño de ERB (normalmente app/views/layout/application.erb):

<head> 
    ... 
    <%= javascript_include_tag "application" %> 
</head> 

y en app/assets/javascripts/application.js:

//= require ext_all_debug 
//= ... 

Cuando se solicita la página HTML, se pide "application.js" y se se genera de forma tal que el código JS de su proveedor esté incrustado en este archivo (tenga en cuenta que no existe una ruta que lo requiera).

Y una última cosa: es muy importante probar el comportamiento en el entorno de producción, ya que típicamente aquellos archivos JS generados serán servidos por nginx/apache. rake assets:precompile es un buen comienzo.

1

Puede agregar:

//= require_tree ../../../vendor/assets/javascripts 

a su archivo application.js.

1

leer el ACTUALIZACIÓN

Parece que el problema está relacionado con el hecho de que EXT tiene su propio camino estructura construida con rutas relativas.

Resolví el problema preservando la estructura de directorios ext total como está (sin dividir imágenes en cualquier lugar) y lo agregué a un directorio de proveedores/externos (creado por mí). Luego añade la ruta con:

config.assets.paths << Rails.root.join("vendor", "assets", "externals").to_s 

y ahora todo está funcionando bien refiriéndose a ella con // = requerir ext-all-debug.js

Actualización 23/12/2013:

A partir de Rails 3, observe que este directorio se ha agregado de forma predeterminada.

Cuestiones relacionadas