Después de instalar la gema AWS-s3, puede añadir esta en este extremo de su receta 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
El uso de un disparador de esta manera:
after "deploy:assets:precompile", "assets:to_cdn"
También tendrá que poner en marcha el compilación en algún momento de su receta con:
load 'deploy/assets'
Resultado: al final de la compilación de activos, todos sus activos van a ser empujado en S3, y podrá acceder a ellos desde la nube.
Luego debe actualizar su config/environment/production.rb para que apunte a su URL de CDN.
config.action_controller.asset_host = "http://assets.example.com"
¿quieres decir directorio público? – eveevans
La forma en que funcionan los orígenes personalizados es que Cloudfront actúa como un proxy para su contenido estático. Configura Rails para que sirva contenido estático desde la url de la nube, pero no copia nada. Luego, cuando un usuario solicita el contenido estático de la nube, Cloudfront dice "No tengo ese archivo, lo obtendré de la aplicación", descarga el archivo de su sitio y luego lo muestra. A partir de ese momento, todas las solicitudes de ese elemento estático provienen de la nube sin molestar a su aplicación. –
¡esto es asombroso! gracias por la explicación. – chourobin