Rails Как загрузить предварительно скомпилированные активы в Cloudfront
- Я использую приложение Rails 3.2
- Я создал дистрибутив Cloudfront с
Начало S3
- Я уже меняю config.action_controller.asset_host на мой
облачный актив
- Я использую capistrano
Я хочу знать, как загружать мои предварительно скомпилированные ресурсы в Cloudfront каждый раз, когда я развертываю
Ответы
Ответ 1
Нет необходимости в ведро s3, так как Amazon Cloudfront теперь поддерживает "пользовательское происхождение". Раньше считалось, что вам нужно указать ведро s3 в качестве источника, но теперь вы можете указать свой облачный дистрибутив в своем приложении rails.
http://aws.typepad.com/aws/2010/11/amazon-cloudfront-support-for-custom-origins.html
Итак, после создания дистрибутива, который указан в вашем общедоступном приложении, вы устанавливаете свой ресурс в соответствующем файле конфигурации, например. production.rb, и вы отправились на гонки.
config.action_controller.asset_host = "url of your cloudfront distribution"
Вот половина достойной статьи о том, как настроить вещи:
http://ryantownsend.co.uk/post/13126016608/cloudfront-cdn-on-rails
Не путайте с битом о настройке CNAME-recprds для поддомена происхождения. Это актуально только в том случае, если вы хотите использовать свой собственный поддомен вместо амазонок.
Ответ 2
После установки драгоценного камня aws-s3 вы можете добавить это в конце вашего рецепта capistrano:
set :cdn_user, "KEY ID" # This is called "CDN KEY API" for AWS
set :cdn_api_key, "YOUR KEY SECRET"
set :cdn_container, "bucket name"
namespace :assets do
task :to_cdn do
require 'aws/s3'
AWS::S3::Base.establish_connection!(:access_key_id => cdn_user, :secret_access_key => cdn_api_key )
assets_dir = "#{shared_path}/assets"
Dir.glob(assets_dir + "/**/*").each do |file|
if !File.directory?(file)
cdn_filename = file.gsub(assets_dir,"assets")
AWS::S3::S3Object.store(cdn_filename, open(file) , cdn_container)
end
end
end
end
С помощью триггера:
after "deploy:assets:precompile", "assets:to_cdn"
Вам также потребуется запустить компиляцию в определенный момент в вашем рецепте с помощью:
load 'deploy/assets'
Результат: в конце вашей компиляции активов все ваши активы будут помещены на S3, и вы сможете получить к ним доступ из облачной инфраструктуры.
Затем вам необходимо обновить конфигурацию /environment/production.rb, чтобы указать URL вашего CDN.
config.action_controller.asset_host = "http://assets.example.com"
Ответ 3
Там большой камень Ruby, который обрабатывает это, называется AssetSync. Если вы объедините его с turbo-sprockets, вы можете убедиться, что при развертывании копируются только новые или обновленные активы.