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, и когда вы довольны результатами, вы можете перейти в свою собственную производственную среду.