Asset_sync

rails で asset pipeline を使って s3 に上げる手順について(opsworks使用)

参考URL

こちらを参考にした。 http://d.hatena.ne.jp/lettas0726/20130320/1363773153

Gemfile

gem 'uglifier', '>= 1.3.0'
gem 'asset_sync'

を追記。

deploy/before_migrate.rb

template "#{release_path}/config/asset_sync.yml" do
  mode "0644"
  source "asset_sync.yml.erb"
end

bash "precompile_assets" do
  user "deploy"
  cwd release_path
  code 'bundle exec rake assets:precompile RAILS_ENV=production'
end

今回は、 before_migrate で呼ぶことにする。
chef-solo で呼ばれるので resource が使える模様。
カスタム chef リポジトリに asset_sync.yml の template を用意しておく。
template は asset_sync.yml.erb としておいておく感じ。

config/environments/production.rb

hoge.example.com のバケットとしたとき、以下のように追記。

config.action_controller.asset_host = '//s3-ap-northeast-1.amazonaws.com/hoge.example.com'
config.assets.initialize_on_precompile = true

existing_remote_files オプションについて

アセットパイプラインでは、ファイルにおそらく md5 の hash 値がついているのを生成する。
ここで複数の rails インスタンスが非同期(もしくは片方のみ)なので
existing_remote_files: ‘delete’ として
precompile を実行するともともと参照していたファイルが消えてしまうので、
config/asset_sync.yml の中の existing_remote_files を keep にする。
(しかし、ゴミはのこる。対処については要検討。

このエントリーをはてなブックマークに追加