Rails 3.1 обслуживающий образы от вендора / assets / images - PullRequest
50 голосов
/ 03 июля 2011

Я пытаюсь поместить некоторые внешние изображения (используемые плагином jQuery) в vendor / assets / images в моем приложении Rails 3.1. Проблема в том, что когда я пытаюсь что-то вроде:

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

Я получаю сообщение об ошибке:

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

Я проверил свой Rails.application.config.assets.paths и в нем перечислены следующие каталоги:

..../app/assets/images
..../app/assets/javascripts
..../app/assets/stylesheets
..../vendor/assets/images
..../vendor/assets/stylesheets
..../.rvm/gems/ruby-1.9.2-p180@mygems/gems/jquery-rails-1.0.9/vendor/assets/javascripts

Как вы можете видеть, там указан / vendor / assets / images. Если я помещу свое изображение в app / assets / images, все будет работать.

Я думал, что новый конвейер активов должен был пройти через все каталоги активов и обслуживать запрошенный файл, где бы он ни находился.

Кто-нибудь знает, в чем здесь проблема?

Ответы [ 4 ]

80 голосов
/ 20 сентября 2011

Мне пришлось перезапустить сервер rails после создания каталога vendor/assets/images.До этого я видел ту же ошибку, что и вы («Нет совпадений маршрутов [GET]»).

Я предполагаю, что сервер rails не проверяет эти каталоги, если они не существовали при первом запуске,Когда вы открываете консоль rails для диагностики проблемы, вы получаете новый экземпляр rails, который знает о каталоге, что только добавляет путаницы.

22 голосов
/ 06 сентября 2011

Если вы используете тему JQuery UI Theme Roller, проблема может заключаться в том, что в файле jquery-ui css изображения находятся в подпапке images.

т.е. Вы должны либо поместить свои изображения в папку './app/assets/images/images', либо отредактировать файл jquery-ui css и удалить префикс папки «images /».

9 голосов
/ 03 июля 2011

В этом руководстве по рельсам описан конвейер активов Райаном Биггом (черновой статус на данный момент).

http://ryanbigg.com/guides/asset_pipeline.html и http://ryanbigg.com/2011/06/sprocket-asset-tags-internals/ для справок.

В соответствии с этим ваш пример должен работать.

Выдержка:

Активы можно размещать внутри приложения в одном из трех мест: приложение / активы, lib / assets или vendor / assets.

app / assets - для активов, которые принадлежат приложению, таких как пользовательские изображения, файлы javascript или таблицы стилей.

lib / assets предназначен для кода ваших собственных библиотек, который на самом деле не вписывается в область применения приложения или тех библиотек, которые совместно используются приложениями.

vendor / assets для активов, которые принадлежат сторонним объектам, таким как код для плагинов JavaScript.

Любой подкаталог, который существует в этих трех местоположениях, будет добавлен в путь поиска Sprockets (это можно увидеть, вызвав Rails.application.config.assets.paths в консоли). Когда актив запрашивается, эти пути будут просмотрены, чтобы увидеть, содержат ли они актив, соответствующий указанному имени. Как только актив найден, он обрабатывается Sprockets, а затем обрабатывается.

Я проверил на примере моего приложения тот же синтаксис, что и у вас. Может быть, у вас есть опечатка на имя вашего имущества.

Для Мартина: путь поиска Sprockets можно увидеть, вызвав Rails.application.config.assets.paths в консоли.

2 голосов
/ 09 марта 2012

Возможно, вам следует создать другую папку в / assets / images.Вы делаете имя 'images', а затем просто копируете все изображения jquery-ui и вставляете в папку 'images', которую вы создали ранее.Надеюсь, это поможет вам.

...