Как я могу ссылаться на фоновые изображения CSS на производстве в Rails 4.0?

Я переключил приложение с 3.2.12 до 4.0.0.rc1. Когда я просмотрел его в процессе производства, фоновое изображение исчезло. Остальные мои объекты изображения были взяты без проблем.

В моих журналах я увидел, что все успешно обработанные изображения имеют дайджест, прикрепленный к концу, например:

2013-05-12T19:57:05.856277+00:00 heroku[router]: at=info method=GET path=/asset/explore-9ec2a1cfd4784133755637f6ef6d5673.png host=xxx.herokuapp.com fwd="69.140.148.75" dyno=web.1 connect=3ms service=5ms status=200 bytes=4064

И мое неудачное фоновое изображение не содержало дайджест, плюс код ответа 404:

2013-05-12T19:57:05.736354+00:00 heroku[router]: at=info method=GET path=/assets/background.png host=xxxx.herokuapp.com fwd="69.140.148.75" dyno=web.1 connect=2ms service=7ms status=404 bytes=728

В файле production.rb есть строка конфигурации, которая позволяет использовать это для кеширования:

# Generate digests for assets URLs
config.assets.digest = true

Это CSS для фона:

body {
  background-image: url('background.png');
  background-attachment: fixed;
  background-position: 100% 100%;
  background-repeat: no-repeat;
}

Я пришел к выводу, что мой CSS файл пытается получить URL-адрес изображения, которого не было, потому что он ссылался на простой ресурс ( "background.png" ) без хэша в конце. Это только проблема для изображений в CSS; все изображения, на которые ссылаются мои файлы .erb, прекрасны. Итак, как я могу ссылаться на этот актив в моем CSS без жесткого кодирования дайджеста? Есть ли способы обхода?

Спасибо за чтение.

Ответ 1

Используйте asset-url. Rails будет препроцитировать это и расширить соответствующий URL.

body {
  background-image: asset-url('background.png');
  background-attachment: fixed;
  background-position: 100% 100%;
  background-repeat: no-repeat;
}