はじめに
Asset Sync を Webpacker に対応させた時のメモを残す
手順
Gemのインストール
Gemfile
group :production do
gem 'asset_sync'
gem 'fog-aws'
end
assets:precompile は production 環境で実行されるため
group :production
を指定する
設定の追加
Asset Pipelineで生成されたファイルの読込先を指定する(従来からあるAsset Syncの設定)
config/environments/production.rb
config.action_controller.asset_host = "//s3-ap-northeast-1.amazonaws.com/#{configatron.aws.s3.bucket_name}"
config.assets.prefix = '/assets'
Webpacker が生成するファイルの出力先の設定を追加する
public/packs
に出力される
config/webpacker.yml
default: &default
public_output_path: packs
config/initializers
でAssetSyncの初期化を行う
config.add_local_file_paths
ブロックでwebpacker生成物のパスを指定する
config/initializers/asset_sync.rb
if defined?(AssetSync)
AssetSync.configure do |config|
config.fog_provider = 'AWS'
Fog.credentials = { path_style: true }
config.aws_access_key_id = ENV['AWS_ACCESS_KEY_ID']
config.aws_secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
config.fog_directory = configatron.aws.s3.bucket_name
config.fog_region = configatron.aws.region
config.existing_remote_files = 'delete'
config.gzip_compression = true
config.manifest = true
config.add_local_file_paths do
Dir.chdir(Rails.root.join('public')) do
Dir[File.join(Webpacker.config.public_output_path, '/**/**')]
end
end
end
end
最後に、作成されたファイルがコミットされないようにignoreしておく
.gitignore
/public/assets
/public/packs
/public/packs-test
assets:precompile の実行
rake assets:precompile
する
$ RAILS_ENV=production rake assets:precompile --trace
マニフェストファイルが作成される
public/assets/.sprockets-manifest-012345****.json
public/packs/manifest.json
生成されたファイルを確認すると、アセットがS3からダウンロードされるように設定されている
public/packs/manifest.json
{
"application.js": "//s3-ap-northeast-1.amazonaws.com/kurorekishi.me/packs/application-2648fb3e982861ae9a1b.js",
"application.js.map": "//s3-ap-northeast-1.amazonaws.com/kurorekishi.me/packs/application-2648fb3e982861ae9a1b.js.map"
}
アセットのアップロードだけやり直したい
アセットのアップロードのみをやり直すことができる
$ RAILS_ENV=production rake assets:sync