14
  • 我使用一個Rails 3.2的應用程序
  • 我創建了一個帶有 S3起源
  • 我已經config.action_controller.asset_host的轉變讓我 CloudFront的資產上的Cloudfront分佈
  • 我使用Capistrano的

我想知道,怎麼我的預編譯的資產每次上傳到我的Cloudfront部署的Rails如何預編譯的資源上傳到的Cloudfront

回答

18

由於Amazon Cloudfront現在支持「自定義來源」,所以不需要s3存儲桶。過去,您必須指定一個s3存儲桶作爲原點,但現在您可以將您的cloudfront分佈指向您的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" 

這裏是如何配置的東西像樣的文章:關於原點子域名設置CNAME recprds

http://ryantownsend.co.uk/post/13126016608/cloudfront-cdn-on-rails

不要用有點困惑。這隻有在你想使用你自己的子域而不是amazons時纔有意義。

+1

你是指公共目錄? – eveevans

+8

自定義起源的工作方式是Cloudfront充當靜態內容的代理。您將Rails配置爲從cloudfront url提供靜態內容,但不會複製任何內容。然後,當用戶向cloudfront請求靜態內容時,cloudfront會說「我沒有該文件,我會從應用中獲取該文件」,它會從您的網站下載文件並提供。從那時起,對該靜態項目的所有請求都來自雲端,而不會打擾您的應用。 –

+0

這太棒了!感謝您的解釋。 – chourobin

14

安裝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,並且您將能夠從雲端訪問它們。

然後您必須更新您的config/environment/production.rb以指向您的CDN URL。

config.action_controller.asset_host = "http://assets.example.com" 
+0

感謝keyz,這是一個很好的解決方案,但我有點懷疑,當我再次部署時,資產會發生什麼,我的意思是說,緩存資產或過期頭文件會有問題嗎? – eveevans

+0

資產在生產過程中進行了指紋識別(將md5哈希添加到名稱中),以便您可以將資產的所有版本保留在同一文件夾中。資產管道的魔力。這防止了更新時的緩存問題:舊版本持續存在,新版本仍然可用。 –

+0

您還應該閱讀資產管道上的完整文檔:http://guides.rubyonrails.org/asset_pipeline.html –