Downloads asset files to Rails applications from a cloud storage, such as AWS S3 and AzureBlob, synchronized with AssetSync gem.
It enables you to distribute a manifest file and asset files to load-balanced redundant servers without commiting these files to your repository.
Add this line to your application's Gemfile:
gem 'asset_sync'
gem 'asset_sync_download'
AssetSyncDownload depends on AssetSync gem deeply.
And then execute:
$ bundle
Or install it yourself as:
$ gem install asset_sync_download
AssetSyncDownload supposes deployment operations as belows:
- Run
assets:precompile
rake task on your local PC. You should configure AssetSync to upload a manifest file not only asset files. - Deploy rails application to servers. Do not start or restart them.
- Run
assets:sync:download
rake task on the servers. It will download the manifest file and asset files. - Restart the rails applications.
rake assets:sync:download:manifest
downloads manifest file.rake assets:sync:download:asset_files
downloads all asset files on a cloud storage.- If you configure AssetSync as
config.manifest = true
, you get only asset files mentioned in the manifest file.
- If you configure AssetSync as
AssetSync has no configurations, but it requires well-configured AssetSync such as config.fog_provider
, config.aws_access_key_id
and config.aws_secret_access_key
.
Configure config/environments/production.rb to use AWS S3 as below. (please refer to documents of AssetSync gem for more information.)
if defined?(AssetSync)
AssetSync.configure do |config|
config.fog_provider = 'AWS'
config.aws_access_key_id = ENV['AWS_ACCESS_KEY_ID']
config.aws_secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
config.manifest = true
end
end
config.manifest
is an option which enables to use the manifest file to get the list of local files to upload. AssetSyncDownload also refers to the option to get the list of remote files to download.
To enable uploading a manifest file to a cloud storage, you should configure AssetSync with config/initializers/asset_sync.rb as below:
if defined?(AssetSync)
AssetSync.configure do |config|
...
config.add_local_file_paths do
if ActionView::Base.respond_to?(:assets_manifest)
manifest = Sprockets::Manifest.new(ActionView::Base.assets_manifest.environment, ActionView::Base.assets_manifest.dir)
manifest_path = manifest.filename
else
manifest_path = self.config.manifest_path
end
[manifest_path.sub(/^#{config.public_path}\//, "")] # full path to relative path
end
end
end
Bug reports and pull requests are welcome on GitHub at https://github.com/devchick/asset_sync_download.
Inspired by:
The gem is available as open source under the terms of the MIT License.