2011-07-03 9 views
50

Estoy tratando de poner algunas imágenes externas (usadas por un plugin jQuery) a proveedor/assets/images en mi aplicación Rails 3.1. El problema es que cuando intento algo como:Rails 3.1 sirviendo imágenes del proveedor/activos/imágenes

<%= image_tag "ui-bg_flat_75_ffffff_40x100.png" %> 

consigo un error:

No route matches [GET] "/assets/ui-bg_flat_75_ffffff_40x100.png" 

Revisé mi Rails.application.config.assets.paths y la lista de estos directorios:

..../app/assets/images 
..../app/assets/javascripts 
..../app/assets/stylesheets 
..../vendor/assets/images 
..../vendor/assets/stylesheets 
..../.rvm/gems/[email protected]/gems/jquery-rails-1.0.9/vendor/assets/javascripts 

Como puedes ver/vendor/assets/images está listado allí. Si pongo mi imagen en la aplicación/activos/imágenes todo funciona.

Pensé que se suponía que la nueva cartera de activos atravesaba todos los directorios de activos y publicaba el archivo solicitado donde lo encontrara.

¿Alguien sabe cuál es el problema aquí?

+0

lo siento, no está ayudando exactamente a su problema, pero ¿cómo ve los Rails.application.config.assets.paths? – Martin

+1

@martin: se puede ver en la consola –

+0

Esta podría ser una pregunta estúpida, pero, ¿sus activos jqueryui están en el directorio de imágenes? Los míos están en el directorio de imágenes, y luego en su propio subdirectorio para preservar las rutas CSS que genera el creador de temas de jqueryui. – Slick23

Respuesta

80

Tuve que reiniciar el servidor de mis rails después de crear el directorio vendor/assets/images. Antes de esto, estaba viendo el mismo error que tú ("Ninguna ruta coincide con [GET]").

Supongo que el servidor de rieles no comprueba estos directorios si no existían cuando se inició por primera vez. Cuando abre una consola de rieles para diagnosticar el problema, obtiene una nueva instancia de rieles que conoce el directorio, lo que solo aumenta la confusión.

+1

reiniciar hizo el truco. ¡Gracias! –

+0

Uso de Pow (y gema de polvo) Acabo de probar un "reinicio de polvo" sin suerte. Luego probé 'polvo abajo' y 'polvo' y, finalmente, Rails.application.config.assets.paths incluyó vendedor/activos/imágenes. – Chris

+1

'reinicio de polvo' hizo el truco para mí – Cristian

9

La génesis de activos se describe en esta guía de carriles por Ryan Bigg (estado del proyecto en este momento).

http://ryanbigg.com/guides/asset_pipeline.html y http://ryanbigg.com/2011/06/sprocket-asset-tags-internals/ para las referencias.

De acuerdo con esto, su ejemplo debería funcionar.

Extracto:

Assets can be placed inside an application in one of three locations: app/assets, lib/assets or vendor/assets.

app/assets is for assets that are owned by the application, such as custom images, javascript files or stylesheets.

lib/assets is for your own libraries’ code that doesn’t really fit into the scope of the application or those libraries which are shared across applications.

vendor/assets is for assets that are owned by outside entities, such as code for JavaScript plugins.

Any subdirectory that exists within these three locations will be added to the search path for Sprockets (visible by calling Rails.application.config.assets.paths in a console). When an asset is requested, these paths will be looked through to see if they contain an asset matching the name specified. Once an asset has been found, it’s processed by Sprockets and then served up.

He probado con un ejemplo en mi aplicación y la misma sintaxis que el suyo trabaja. Tal vez tenga un error tipográfico en el nombre de su activo.

Para Martin: la ruta de búsqueda de Sprockets es visible llamando a Rails.application.config.assets.paths en una consola.

+0

Sí, lo he leído. Por eso creo que debería funcionar. Tal vez es un error. –

+0

Para mí funciona. ¿Intentó cambiar el nombre de su activo como prueba? –

+0

este es un problema recurrente en todas mis aplicaciones que construyo en Rails 3 – botbot

22

Si está utilizando un tema jQuery UI Theme Roller, el problema podría ser que en el archivo jquery-ui css las imágenes están referenciadas dentro de una subcarpeta 'images'.

I.e. o bien tiene que poner sus imágenes en una carpeta './app/assets/images/images' o tiene que editar el archivo jquery-ui css y eliminar el prefijo de la carpeta 'images /'.

+8

Es algo confuso que pueda ver 'GET http://example.com/assets/images/darrowleft.gif 404 (No Encontrado) 'en una consola javascript y usted tiene esa imagen en' vendor/assets/images'. Sin embargo, * debe * ver 'http: // example.com/assets/darrowleft.gif' para la URL. Para ver 'http: // example.com/assets/images/darrowleft.gif' debes poner esa imagen en' vendor/assets/images/images' como se explica en @woelfle. Si lo hace, le ahorrará la molestia de tener que modificar rutas en archivos CSS instalados. –

+0

Poner las imágenes en otra carpeta llamada imágenes parece extraño, pero funcionó para mí en los carriles 3.1.3. ¡Gracias! – counterbeing

+0

¡Gracias, George, esa fue la pieza que faltaba del rompecabezas para mí! – Sprachprofi

2

Quizás deba crear otra carpeta en/assets/images. Usted crea un nombre de "imágenes" y luego simplemente copia todas las imágenes de jquery-ui y pega en la carpeta "imágenes" que creó anteriormente. Espero que esto te ayude.