Ответ 1
Похоже, что в последнее время sass-rails
теперь интерпретирует команду image_url
в файле scss ожидаемым образом, разрешая конечное местоположение соответствующего изображения.
image_path
возвращает только путь (без хоста).
Помощник url_for
не примет ни одного пути, поэтому что-то вроде url_for(image_path('image.png'))
не будет работать. Хотя внутренний url_for
в ActionDispatch::Http::Url.url_for
, как представляется, выполняет трюк (source), похоже, нет открытого интерфейса для он.
Как мне это сделать? В конечном итоге было бы неплохо иметь такую функцию, как image_url
, которая работает как url_for
для маршрутов, так что я мог бы вызвать image_url('image.png')
и получить абсолютный URL-адрес, заданный всем default_url_options
.
Похоже, что в последнее время sass-rails
теперь интерпретирует команду image_url
в файле scss ожидаемым образом, разрешая конечное местоположение соответствующего изображения.
def image_url(source)
URI.join(root_url, image_path(source))
end
Таким образом вы получаете URL-адрес либо с помощью assets_host
, либо с помощью root_url.
Попробуйте это в application_helper.rb
(из одного из комментариев на странице Spike):
def image_url(source)
"#{root_url}#{image_path(source)}"
end
Наши производственные и промежуточные активы находятся на s3/cloudfront... но не локально /dev. Поэтому я написал это (может быть, излишне, и, вероятно, можно упростить):
def get_digest_file(source)
return asset_path(source.to_s.downcase) unless Rails.application.config.assets.digests.present?
return ActionController::Base.asset_host + "/assets/" + Rails.application.config.assets.digests[source.to_s.downcase]
end
От Полный URL-адрес для пути изображения в Rails 3
request.protocol + request.host_with_port + image_path('image.png')
Вы даже можете создать помощника DRY, что-то вроде
def full_image_path(img_path)
request.protocol + request.host_with_port + image_path(img_path)
end
Вы можете определить css с абсолютным URL-адресом для любого фонового изображения или других активов. Таким образом, вы можете генерировать его динамически после этого Как получить абсолютные пути изображения в ваших файлах css с помощью sass/scss.
CSS
body {
background-image: image-url(background.png);
}
В вашем файле среды измените его с помощью
config.action_controller.asset_host = "http://your.domain.com/"
Тогда ваш css будет выглядеть примерно так:
body {
background-image: url(http://your.domain.com/assets/background.png);
}