17

ユーザーが Amazon S3 に写真をアップロードできるようにする Rails 3.1 アプリがあります。cap deploy本番環境で S3 を使用しているため、プリコンパイル済みのアセット (application.js & application.css & images) を S3 バケットに自動的に (on で) アップロードし、そこで提供したいと考えています。十分に単純です。

設定を超えてconfig.action_controller.asset_host = "http://assets.example.com"

要するに、Capistrano がそうするための実用的な「レシピ」の例を探していますが、最新の (3.1 アセット パイプラインと互換性のある) ものを見つけることができないようです。アセットを正常にプリコンパイルしていますが、それらを S3 に移動するにはどうすればよいですか? そして、理想的には、変更されたものだけですか?

現在の「レシピ」の「肉」:

...

after "deploy:update_code", "deploy:pipeline_precompile"
before "deploy:finalize_update", "deploy:copy_database_config"

namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end

  # copy database.yml into project
  task :copy_database_config do
    production_db_config = "/path_to_config/#{application}.yml"
    run "cp #{production_db_config} #{current_release}/config/database.yml"
    `puts "replaced database.yml with live copy"`
  end
  task :pipeline_precompile do
    run "cd #{release_path}; RAILS_ENV=production bundle exec rake assets:precompile"
  end
end
4

4 に答える 4

14

これは、デプロイ時にアセットをS3にアップロードするという質問に直接答えるものではありませんが、次のアプローチで目標を達成でき、実装が少し簡単になると思います。

S3でアセットをホストし、config.action_controller.asset_hostディレクティブを使用する主な利点は次のとおりです(とりわけ)。

  • アセットの追加の同時ダウンロードを許可
  • Cookieのないドメインからアセットを提供する

s3を使用する代わりに、CloudFrontCDNを使用して同じメリットを実現できます。新しいRailsアセットパイプラインはCloudFrontと非常にうまく連携します。現在本番環境で使用している手順は次のとおりです。

新しいCloudFrontディストリビューションを作成する

  1. 配信方法はダウンロードする必要があります
  2. カスタムオリジンを選択し、それをWebサーバーにポイントします
  3. 配布の詳細については、cdn01.mydomain.comなどの追加のCNAMEレコードを追加できます。
  4. デフォルトのルートオブジェクトは空のままにすることができます

x12whx1751nfir.cloudfront.netサイトがSSL経由で提供されている場合は、ELBの場合とは異なり、カスタム証明書はまだ利用できず、ユーザーには証明書のホスト名の不一致エラーが表示されるため、スタイルのホスト名を使用する必要があります。SSLを使用しない場合は、デフォルトのホスト名または提供されている任意のCNAMEのいずれかを使用できます。

これがセットアップされると、最初のオブジェクトリクエストがサーバーからフェッチされ、CloudFront内に配置されます。アセットパイプラインによって生成されたダイジェストフィンガープリントは、変更されたアセットのみを送信するという要件を処理します。

于 2011-09-20T05:12:21.617 に答える
9

capistranoを更新し、デプロイファイルに以下を含めます

load 'deploy/assets'
于 2011-09-19T22:53:59.920 に答える
2

S3を使用する場合は、 asset_syncgemを確認してください。Rackspace Cloud Filesを使用できるようにしようとしていますが、いくつか問題があります。

于 2012-01-20T00:01:18.503 に答える
0

jammit-s3 gemを使用できます。構成して使っています。完璧で、非常にシンプルな構成です。

于 2012-02-11T19:33:31.720 に答える