Rails 3.1 и Image Assets - PullRequest
       27

Rails 3.1 и Image Assets

156 голосов
/ 02 июня 2011

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

# Ruby    
image_tag "admin/file.jpg" .....
#CSS
.logo{ background:url('/assets/images/admin/logo.png');

К вашему сведению.Просто для тестирования я пока не использую тег asset_path, так как я не скомпилировал мои активы.

Хорошо, пока все хорошо, пока я не решил обновить изображение.Я заменил некоторые цвета, но при перезагрузке новое стилизованное изображение не отображается.Если я смотрю изображение прямо в браузере, оно все еще показывает старое изображение.Пройдя еще один шаг, я уничтожил папку с изображениями администратора.Но это ничего не сломало, все изображения все еще отображаются.И да, я очистил свой кеш и попробовал несколько браузеров.

Есть ли какое-то кэширование изображений?Это просто локальная разработка с использованием pow для обслуживания страниц.

Даже при уничтожении всей папки с изображениями изображения все еще обслуживаются.

Я что-то упустил?

Ответы [ 7 ]

226 голосов
/ 07 июня 2011

В 3.1 вы просто избавляетесь от части 'images' пути. Таким образом, изображение, которое находится в /assets/images/example.png, будет действительно доступно в запросе get по этому URL - /assets/example.png

Поскольку папка assets/images создается вместе с новым приложением 3.1, это соглашение, которое они, вероятно, хотят, чтобы вы следовали. Я думаю, что именно здесь image_tag будет искать его, но я еще не проверял.

Также, во время выступления с RailsConf, я помню, как D2h говорил, что в public folder больше не должно быть много, в основном только страницы ошибок и значок.

98 голосов
/ 21 июня 2011

Вам нужно изменить расширение вашего css-файла с .css.scss на .css.scss.erb и выполнить:

background-image:url(<%=asset_path "admin/logo.png"%>);

Возможно, вам потребуется выполнить «жесткое обновление», чтобы увидеть изменения.CMD + SHIFT + R в браузерах OSX.

В работе убедитесь, что

rm -rf public/assets    
bundle exec rake assets:precompile RAILS_ENV=production

произойдет при развертывании.

22 голосов
/ 25 июня 2011

Для чего это стоит, когда я сделал это, я обнаружил, что ни одна папка не должна быть включена в путь в файле css.Например, если у меня есть app/assets/images/example.png, и я помещаю это в мой файл css ...

div.example { background: url('example.png'); }

... тогда каким-то образом это волшебным образом работает.Я понял это, запустив задачу rake assets:precompile, которая просто высасывает все из всех ваших путей загрузки и помещает ее в папку ящика нежелательной почты: public/assets.Это иронично, IMO ...

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

Вид разочарования, нет лучших документов для такого большого изменения.

16 голосов
/ 02 августа 2013

В rails 4 теперь можно использовать URL-адрес помощника css и sass:

div.logo {background-image: image-url("logo.png");}

Если фоновые изображения не отображаются, подумайте над тем, как вы ссылаетесь на них в таблицах стилей.

10 голосов
/ 05 июня 2011

при ссылке на изображения в CSS или в теге IMG используйте image-name.jpg

, пока изображение действительно находится в ./assets/images/image-name.jpg

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

http://railscasts.com/episodes/279-understanding-the-asset-pipeline

Этот Railscast (видео по Rails Tutorial по конвейеру активов) также помогает объяснить пути в конвейере активов.Я нашел это довольно полезным, и на самом деле смотрел его несколько раз.

Решение, которое я выбрал - @Lee McAlilly's выше, но этот Railscast помог мне понять, почему это работает.Надеюсь, это поможет!

0 голосов
/ 10 октября 2013

Конвейер ресурсов в rails предлагает метод для этой конкретной вещи.

Вы просто добавляете image_path ('имя файла изображения') в свой файл css или scss, и rails позаботится обо всем.Например:

.logo{ background:url(image_path('admin/logo.png'));

(обратите внимание, что он работает так же, как в представлении .erb, и вы не используете "/ assets" или "/ assets / images""в пути)

Rails также предлагает другие вспомогательные методы, и здесь есть другой ответ: Как использовать опорные изображения в Sass при использовании Rails 3.1?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...