I was working on my project Kwaab and suddenly because of massive traffic (1500-2000 hits per second), the site starts slowing down. Page load time was increased to 10 seconds and sometimes even more than that. We tried to increase the server, still no significant improvements. Here are some things we have already done:

Landing Page is cached

6GB of RAM and only 800MB is used

CPU utilization is less than 40%

User uploaded images are already coming from Amazon s3

Use cache control and expiry headers

Compress images using smusher

Compress js and CSS and lot more basic things we should do.

But still, the site is super damn slow, because the issue was loading time for assets. As my assets were coming from Linode itself and due to high traffic of the website, the client was waiting for assets for like 5 seconds just for the logo, etc., and that was slowing my site. I got a life saver i.e. asset_sync a gem to deploy your assets on Amazon bucket :)

How to implement deploying assets on amazon s3

Install the gem: If you want, you can put it within your :assets group in your Gemfile.

gem "asset_sync"

Create a file asset_sync.yml in your config directory or check out the inbuilt generator i.e

rails g asset_sync :install -- use - yml -- provider = AWS

which will generate a file in app/config/asset_sync.yml. Now I have this asset_sync.yml file, but you can configure it as per the docs of the gems.

staging: fog_provider: AWS aws_access_key_id: ********************** aws_secret_access_key: ********************** fog_directory: assetsstaging gzip_compression: 'true' existing_remote_files: keep production: fog_provider: AWS aws_access_key_id: ********************** aws_secret_access_key: ********************** fog_directory: assetsproduction gzip_compression: 'true' existing_remote_files: keep

Place these lines of code in your production/staging environment file:

asset_sync_config_file = File . join ( Rails . root , 'config' , 'asset_sync.yml' ) ASSETCONFIG = HashWithIndifferentAccess . new ( YAML :: load ( IO . read ( asset_sync_config_file )))[ Rails . env ] ASSETCONFIG . each do | k , v | ENV [ k . upcase ] ||= v end

Down the above code. Place these lines of code which will tell rails to get the assets from here.

config . action_controller . asset_host = "// #{ ENV [ 'FOG_DIRECTORY' ] } .s3.amazonaws.com"

Also make sure your production/staging environment files have: config.assets.digest is set to true. config.assets.enabled is set to true.



That’s it. Now just deploy your Rails application and all the assets will be pushed to the respective bucket on Amazon :) and it solved my server issue to with a considerable amount. We made some more tweaks. I will post them soon.