Rails не показывает фоновое изображение

У меня есть собственный CSS-файл style.css, а не в application.css:

background-image: url('book.png');

я сделал

rake assets:precompile RAILS_ENV=production

но это не показывает изображение. Также я дал разрешения на изображение (755). Как я могу решить это?

И нет ошибок в консоли

войти /production.log

I, [2014-12-24T01:22:04.323979 #27157]  INFO -- : Started GET "/login" for 81.21.82.67 at 2014-12-24 01:22:04 -0500
I, [2014-12-24T01:22:04.329702 #27157]  INFO -- : Processing by BookController#login as HTML
I, [2014-12-24T01:22:04.333589 #27157]  INFO -- :   Rendered book/login.html.erb within layouts/application (1.0ms)
I, [2014-12-24T01:22:04.334700 #27157]  INFO -- : Completed 200 OK in 5ms (Views: 2.9ms | ActiveRecord: 0.0ms)

Когда я открываю из браузера http://example.com/assets/book.jpg он тоже не открывается

3 ответа

После прекомпиляции путь к изображению будет изменен, поэтому вам нужно использовать asset_path для получения правильного пути к изображению из ресурса.

Если вы используете asset_path, тогда будет легко получить изображение после прекомпиляции.

Использовать этот:

background-image: asset_path('book.png');

вместо:

background-image: url('book.png');

Предполагая, что book.png является локальным изображением, вам, вероятно, нужно внести два изменения:

а. + Изменить style.css в style.css.scss

б. Заменить background-image: url('book.png'); с background-image: image-url('book.png');

Это гарантирует, что CSS использует полный URL-адрес ресурса для изображения book.png.

Гиды твои друзья.

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

Это для большего блага. Результатом этого является то, что если файл изменяется в новом выпуске, он получает другое имя при обслуживании (даже если вы не переименовали его самостоятельно), поэтому браузеры и системы кэширования немедленно обнаруживают изменение и запрашивают новый ресурс. Нет боли с аннулированием кэша.

ERB используется во время прекомпиляции активов, и вы можете использовать его, добавив .erb к имени файла, как login.css.erb, В руководствах есть пример.

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

В руководствах даже описан способ встраивания изображения прямо в CSS в base64. Он хорошо работает с небольшими изображениями в виде PNG-иконок, на один запрос меньше и только на +33% к размеру изображения.

#logo {
  background: url(<%= asset_data_uri 'logo.png' %>)
}
Другие вопросы по тегам