Как изменить формат URL-адресов Rails asset_tag? - PullRequest
5 голосов
/ 22 декабря 2010

Фон

В настоящее время я работаю над проектом Rails 3, который намереваюсь использовать с Amazon CloudFront с пользовательским источником, указывающим на мой настоящий веб-сервер. Это означает, что мой веб-сервер скажет браузеру извлечь статические активы из CloudFront, если CloudFront кэширует ресурс, он вернет его, если не получит его, используя тот же путь с моего веб-сервера, а затем кеширует его на будущее запросы.

Задача

Amazon CloudFront удаляет и игнорирует параметры строки запроса при определении того, следует ли использовать собственный кэш для повторной загрузки ресурса из его источника. Это, очевидно, создает проблему с тем, как Rails генерирует URL с RAILS_ASSET_ID, что должно сделать: /assets/path/to/asset.ext?RAILS_ASSET_ID. При использовании URL-адресов активов по умолчанию CloudFront будет удерживать устаревшие активы в течение 24 часов.

Решение

То, что я надеюсь сделать, так или иначе переопределить способ, которым Rails 3 генерирует теги ресурсов, чтобы я мог генерировать URL-адреса, такие как /assets/RAILS_ASSET_ID/path/to/asset.ext. У меня уже есть решение о том, как заставить веб-сервер реагировать на эти URL, мне просто нужно выяснить, как заставить Rails генерировать URL.

Примечания

  1. My RAILS_ASSET_ID будет подстрокой моего последнего хита git commit. Установка этого параметра будет обрабатываться Capistrano в процессе развертывания. Я согласен с использованием всех кэшей ресурсов в каждом развертывании, мне не нужны идентификаторы для конкретных активов
  2. Я уже пытался переопределить ActionView::Helpers::AssetTagHelper.rewrite_asset_path, но, похоже, это не сработало, и из того, что я прочитал, это частный метод, на который нельзя полагаться.
  3. Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 22 декабря 2010

"Установить ActionController::Base.config.asset_path на процесс, который выбирает путь неизмененного ресурса и возвращает путь, необходимый для работы кэширования активов."

Это из документации AssetTagHelper .

1 голос
/ 22 декабря 2010

Плагин asset_id должен решить вашу проблему. Он поддерживает Amazon S3 и CloudFront.

...