Rails 3.1 и Image Assets

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

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

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

Вы хотите изменить расширение своего файла 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

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

Ответ 3

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

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

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

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

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

Ответ 4

В рельсах 4 теперь вы можете использовать css и sass helper image-url:

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

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

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

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

Ответ 8

Вы можете использовать gem PaperClip https://github.com/thoughtbot/paperclip

Мне нужен ImageMagick (http://www.imagemagick.org/script/index.php).

Это решение должно решить любые проблемы с изображениями.

Учетные записи Heroku.com поставляются с предустановленной программой ImageMagick, поэтому вам нужно установить ее только на локальном компьютере для среды разработки, если вы хотите протестировать производственную версию с Heroku.

Вы можете протестировать свое приложение на Heroku, и когда вы довольны результатами, вы можете перейти в свою собственную производственную среду.