15
18

More than 5 years have passed since last update.

Asset Sync を Webpacker と連携させる

Last updated at Posted at 2017-10-28

はじめに

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
15
18
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18