Po zainstalowaniu gem aws-s3, można dodać to na tym koniec swojej recepturze 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
Korzystanie wyzwalacz tak:
after "deploy:assets:precompile", "assets:to_cdn"
Potrzebny będzie również, aby uruchomić Kompilacja w pewnym momencie w swojej recepturze z:
load 'deploy/assets'
Wynik: na koniec kompilacji aktywów, wszystkie aktywa zamiar zostać przesunięta na S3, a będziesz mógł uzyskać do nich dostęp z chmury.
Następnie należy zaktualizować plik config/environment/production.rb, aby wskazać adres URL CDN.
config.action_controller.asset_host = "http://assets.example.com"
masz na myśli katalog publiczny? – eveevans
Sposób działania początków niestandardowych to Cloudfront działający jako proxy dla Twojej statycznej zawartości. Skonfiguruj Railsy tak, aby wyświetlały statyczną treść z adresu URL w chmurze, ale niczego nie kopiujesz. Następnie, gdy użytkownik zażąda statycznej zawartości z chmury, w chmurze mówi "Nie mam tego pliku, dostanę go z aplikacji", pobiera plik z Twojej witryny, a następnie udostępnia go. Od tego momentu wszystkie żądania dotyczące tego statycznego elementu pochodzą z chmury bez przeszkadzania Twojej aplikacji. –
to jest niesamowite! Dziękuję za wyjaśnienie. – chourobin