14
  • Rails 3.2 アプリを使用しています
  • S3 オリジンで Cloudfront ディストリビューションを作成しました
  • config.action_controller.asset_host を自分のクラウドフロント アセットに既に変更しています
  • カピストラーノを使っています

デプロイするたびにプリコンパイル済みアセットを Cloudfront にアップロードする方法を知りたい

4

3 に答える 3

20

Amazon Cloudfront が「カスタムオリジン」をサポートするようになったため、s3 バケットは必要ありません。以前は、s3 バケットをオリジンとして指定する必要がありましたが、今では、レール アプリでクラウドフロント ディストリビューションを指定できます。

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 の設定について少し混乱しないでください。これは、Amazon の代わりに独自のサブドメインを使用する場合にのみ関係します。

于 2012-05-25T04:04:53.787 に答える
15

aws-s3 gem をインストールした後、これを 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 にプッシュされ、クラウドフロントからそれらにアクセスできるようになります。

次に、CDN URL を指すように config/environment/production.rb を更新する必要があります。

config.action_controller.asset_host = "http://assets.example.com"
于 2012-05-24T22:32:39.373 に答える
3

これを処理するAssetSyncという優れた Ruby gem があります。これをturbo-sprocketsと組み合わせると、新しいアセットまたは更新されたアセットのみがデプロイ時にコピーされるようにすることができます。

于 2013-04-09T16:18:18.333 に答える