Раздаём картинки рельсами после отключения Google'ом svn репозиториев
Видимо, на неделе гугл отключил svn репозитории code.google.com.
Если вы не подключали скрипты, раздаваемые из этих репозиториев, вы могли этого не заметить, как и я.
Меня удивил увеличившийся трафик в репозиторий google-maps-utility-library-v3, но сначала я не понял, почему это может быть. Позже я увидел, что пропали изображения иконок кластеров на карте. Дело в том, что путь до иконок захардкожен в MarkerClusterer и указывает на code.google.com.
Как настроить sprockets раздавать эти картинки, читайте под катом.
Сначала настроим рельсы, подразумевая что у нас уже есть копия google-maps-utility-library-v3 в репозитории. Если у вас её нет, как её можно сделать, будет написано ниже.
Добавьте путь до google-maps-utility-library-v3 в пайплайн (скорее всего, вы это уже сделали):
# config/initializer/assets.rb
Rails.application.config.assets.paths += %W(
#{Rails.root}/vendor/assets/google-maps-utility-library-v3
)
Теперь скажем sprockets, что мы хотим, чтобы он собрал картинки из библиотеки:
# config/initializer/assets.rb
Rails.application.config.assets.precompile += %w(
markerclustererplus/images/*.png
)
Настроим MarkerClusterer использовать наши картинки. Нужно изменить расширение файла с .js.coffe
на .js.coffee.erb
. Мы не будем хардкодить имя хоста, так в девелопменте будут использоваться локальные картинки, и не нужно будет загружать их с продакшн-сайта. (UPD. Спасибо DeKaNszn за идею)
#= require markerclustererplus/src/markerclusterer_packed.js
#= require infobox/src/infobox_packed.js
# ... require anything you want
MarkerClusterer.IMAGE_PATH = '/assets/markerclustererplus/images/m'
# Это было исправлено с подсказки в комментариях
# MarkerClusterer.IMAGE_PATH = <%= (Rails.application.routes.url_helpers.root_url +
# 'assets/markerclustererplus/images/m').to_json %>
На этом всё. Далее о том, как добавить google-maps-utility-library в ваш репозиторий.
Я использую git подмодули:
git submodule add \
https://github.com/printercu/google-maps-utility-library-v3-read-only.git \
vendor/assets/google-maps-utility-library-v3
Не забудьте настроить деплой. Добавьте после чекаута:
git submodule init
git submodule sync
git submodule update — init
Теперь всё готово к выкатке.
Вы также можете поискать bower-пакеты или добавить библиотеку в репозиторий целиком, если не хотите использовать подмодули.