Middleman and S3 Sync, the right way

I love Middleman. I built this site with Middleman and I've used it for a number of other projects. When it comes to syncing your site to S3, the official middleman sync plugin falls a little short. You need to use middleman s3_sync.

The only problem I had with middleman sync is it didn't delete old files from S3 after upload. I only noticed the problem when I started using activate :asset_hash to fingerprint my static assets. The documentation says to set sync.existing_remote_files = 'delete' to remove old files from S3, but it never worked for me. After some googling I saw this in the middleman s3_sync readme.

Middleman Sync does a great job to push Middleman generated websites to S3. The only issue I have with it is that it pushes every files under build to S3 and doesn't seem to properly delete files that are no longer needed.

Once you install the gem set your caching policy for HTML files in config.rb

caching_policy 'text/html', max_age: 0, must_revalidate: true

Update

I do not use s3_sync any longer. Personally, I found the aws cli best suited my needs. Please, read my article to learn more about my integration with middleman and the aws cli.