Scaling down to single instance Elastic Beanstalk.

April 13, 2015


When you are looking to reduce your AWS costs, you might consider removing the Load balancer. At $20 per month it accounts for a large proportion of the hosting costs for a small application. Is it really needed right now? Down the line when your application grows, you can easily bring it back - right? Elastic beanstalk is handy for provisioning and deployment, and thankfully the load balancer is not compulsory. ... Read more

Rails 4.2.1 upgrade ( SMTP email sending fail)

March 27, 2015


Soon after we updated to Rails 4.2.1 from 4.2.0 deployed - the site stopped responding and we saw this error in the passenger log: phusion_passenger/preloader_shared_helpers.rb:69:in `fork': Cannot allocate memory - fork That was also the last time emails were successfully sent from Elastic Beanstalk. Now SMPT emails are silently failing with no clues in the logs. We were unsure if the memory issue was with this AWS instance or this update. ... Read more

Moving Rails development from Windows to Linux

February 23, 2015


Recently we embarked on a new feature requiring a gem that is not compatible with Windows. To re-quote a quote from https://meta.discourse.org/t/bundle-install-fails-on-windows/6494 : “The reality is that Ruby, as used by most Rails apps is full of unixism, performance of Ruby MRI (the default Ruby) on Windows is abysmal, Rails load times are hellish, sooner or later (more likely sooner) you are going to hit gems that simply do not work properly on Windows. ... Read more

Configuring HTTPS for the AWS Elastic Beanstalk Load balancer

January 19, 2015


Switching your Rails site to always use HTTPS takes a bit configuring. Here is how we followed AWS’s 3 high level steps: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ssl-server-cert.html Create a custom domain with your DNS provider. Create and upload an SSL certificate to AWS Identity and Access Management (AWS IAM). Update your Elastic Beanstalk environment to use HTTPS. Step 1) was DONE - We already had our own www.ourdomain.com, not registered on AWS route 53 nor using the AWS route 53 name servers, but with godaddy. ... Read more

Upgrading to Ruby 2.1.4, from 1.9.3

January 2, 2015


Now that Rails 4.2.0 is out and several things have aligned, we took the plunge to upgrade to Ruby 2.1.4 from 1.9.3. We had already upgraded to Rails 4.2.0. Upgrading ruby was fairly straightforward, and we improved the AWS deployment in the process: faster updates & DB no longer tied to EB. Here are the steps we took: The plan was to create a whole new AWS EB environment using the latest 2014. ... Read more

Background processing on the cheap.

October 27, 2014


We recently upgraded to Rails 4.2.0.beta2 to take advantage of the new Active Job framework and other improvements. We chose Sucker Punch to avoid the cost of using a separate worker on Elastic Beanstalk, along with Fist Of Fury for scheduling ( which we ended up not using ). "I use sucker_punch as a poor man's sidekiq. I can have async jobs on Heroku without paying the extra worker. My jobs are usually very small and fast, so it works just fine. ... Read more

Upgrading to Rails 4.2.0.beta2 ( aka upgrading to rspec-rails 3.1.x )

October 21, 2014


Here is the process we went through to get our tests passing after upgrading our Rails app from Rails 4.1 to Rails 4.2.0.beta2. We updated the rails gem version and ran bundle update, and found these gems needed to be upgraded to resolve dependencies: gem 'rspec-rails', '~> 2.14.1' upgraded to '~> 3.1.0' gem 'rspec', '~> 2.14.1' upgraded to '~> 3.1.0' gem 'sass-rails', '>= 3.2' upgraded to '>= 5.0.0.beta1' gem 'bootstrap-sass', '~> 3. ... Read more

Deploying versions with zero downtime ( 2 months later )

October 7, 2014


Again, two months, almost to the day since we last hit problems with deployment, we are here again. Up till the day before, deployments worked fine if a little slow, but now they fail with a timeout. The site is running okay but remains at that version: “Update environment operation is complete, but with command timeouts. Try increasing the timeout period. For more information, see troubleshooting documentation.” It is not possible to retrieve the logs - also due to an execution timeout. ... Read more

Speeding up Ruby on Rails

August 19, 2014


…with less sql queries A Rails application will make a large number of sql queries per page unless steps are taken to mitigate this. This is bad because it degrades the performance of your app, affects your ability to scale, and will cost you money. Install the New Relic gem to see the sql queries made when loading a page in your app. Here is what we changed to reduce the number of sql queries per page: For lists: fix the n+1 problem with eager loading Avoid unnecessary count queries resulting from ”. ... Read more

Eager loading and pg_search: good bye to polymorphic association.

August 11, 2014


When we first designed the database schema for our Rails project, we employed the ‘Single Table Inheritance’ and ‘Polymorphic Associations’ strategies to two different and deserving cases. For the latter case, we needed to model different types of a class having common properties as well as unique. So for this, Polymorphic Association was chosen over Single Table Inheritance to achieve a cleaner data structure ( with less holes ). Since then, the project has evolved and undergone several performance enhancement iterations, and today we decided it was time to lose the polymorphic association at the center of an n + 1 performance problem. ... Read more

© 2018 Keith P | Follow on Twitter | Git