CSS в Rails Asset Path не обрабатывается ERB при разработке - PullRequest
4 голосов
/ 22 ноября 2011

У меня есть приложение Rails со следующим в /app/assets/stylesheets/styles.css.erb:

...
#nestedbg {
    background-position: left top;
    background-image: url(<%= asset_path 'siteheader2.png' %>);
    background-repeat: repeat-x;
    background-attachment: fixed;
}
...

Когда я запускаю rake assets:precompile, а затем запускаю rails s -e production, все работает как положено.Однако, когда я удаляю предварительно скомпилированные ресурсы и запускаю rails s в разработке, файл CSS появляется, как показано выше, вместо правильной замены.

Я попытался поместить config.assets.compile = true в /config/environments/development.rb, но это непомощь.

Есть идеи?Спасибо.

Ответы [ 6 ]

8 голосов
/ 22 ноября 2011

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

Вы можете сделать это так:

/* styles.css.scss */
background-image:url(image_path("siteheader2.png"));

Если у вас не было шанса, я бы также предложил взглянуть на SASS : он интегрирован в конвейер ресурсов Rails и позволяет вам делать такие крутые вещи, как объявления переменных, вложение, смешивание, ...

4 голосов
/ 05 декабря 2011

Я обнаружил, что мои css-файлы не будут обрабатываться ERB, если только не была добавлена ​​обработка SCSS.

Я изменил свой screen.css.erb на screen.css.scss.erb, и теперь <%= asset_path 'file.png' %> отображается правильно как /assets/file.png.

Я на Rails 3.1.3.

2 голосов
/ 23 ноября 2011

Я использовал Rails 3.1.1, и когда я переключил приложение на Rails 3.1.3, проблема ушла. Я переключился обратно на 3.1.1, чтобы посмотреть, вернулась ли проблема, и это не так.

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

0 голосов
/ 19 апреля 2013

CSS и ERB

Конвейер активов автоматически оценивает ERB.Это означает, что если вы добавите расширение erb к ресурсу CSS (например, application.css.erb), то в ваших правилах CSS будут доступны такие помощники, как asset_path:

.class { background-image: url(<%= asset_path 'image.png' %>) }

Это записывает путь кконкретный актив, на который ссылаются.В этом примере имеет смысл иметь изображение в одном из путей загрузки ресурсов, таких как app / assets / images / image.png, на который здесь будет ссылаться.Если это изображение уже доступно в public / assets как файл с отпечатками пальцев, то на этот путь ссылаются.

Если вы хотите использовать URI данных - метод встраивания данных изображения непосредственно в файл CSS - выможно использовать помощник asset_data_uri.

CSS и Sass:

При использовании конвейера ресурсов пути к ресурсам должны быть переписаны, а sass-rails предоставляет -url и-path помощники (через дефис в Sass, подчеркнут в Ruby) для следующих классов ресурсов: изображения, шрифта, видео, аудио, JavaScript и таблицы стилей.

image-url("rails.png") becomes url(/assets/rails.png)
image-path("rails.png") becomes "/assets/rails.png".

Можно использовать и более общую форму, но активдолжны быть указаны путь и класс:

asset-url("rails.png", image) becomes url(/assets/rails.png)
asset-path("rails.png", image) becomes "/assets/rails.png"

Ссылка: Направляющая направляющей линии трубопроводов активов

Заголовок: 2.2.1 и 2.2.2 соответственно.

0 голосов
/ 28 февраля 2012

Совет Сэма Оливера помог мне, просто переименование расширений не обновило временную метку файлов.

0 голосов
/ 21 февраля 2012

Как ни странно, я обнаружил, что изменение asset_path на asset_data_uri и затем обратно на asset_path работает для меня. Все время использовал Rails 3.1.3.

Странно.

...