## December 21, 2015

What we did to upgrade a small Rails app from Rails 4.2.5 to Rails 5.0.0.beta1. Now the upgrade is deployed in AWS, here is where we are at: When deploying, remember to change the secret key base to invalidate all sessions. ( or your users will get a nasty 500 error ) Temporarily removed NewRelic from the gemfile – it doesn’t currently support Rails 5.0.0.beta1. (UPDATE: as of 11 Feb NewRelic supports Rails 5. ...

# 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. ...

# 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. ...

# 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. ...

# 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. ...

# 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 ”. ...

## 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. ...

# Deploying versions with zero downtime

## July 24, 2014

Two months, almost to the day since we last hit problems with deployment, it looks like 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. ...

# Adventures in creating a new AWS EB environment

## May 21, 2014

We added queue classic to our Rails 4.1 + PostgreSQL application running on the AWS EB free tier. Then we hit problems. Later deployments failed (10 min time-out) yet the website continued to work okay. The cause could have been the QC worker rake task, additional gems or maybe a combination of the two. So we tried restarting the app server => failed (10 min time-out). Then we tried rebuilding the whole EB environment => failed to remove a security group due to dependencies. ...

# Rails 4.1 upgrade from 4.0

## April 16, 2014

We have just upgraded a rails 4.0 application to Rails 4.1. It has a PostgreSQL DB; is developed on Windows; and is run in production on Linux in AWS. All rspec tests were passing and on rails 4.0 prior to the upgrade. On setting the rails version to 4.1, we had some test failures. Here are the fixes made: 1) Timezone error: C:/Ruby193/lib/ruby/gems/1.9.1/gems/tzinfo-1.1.0/lib/tzinfo/data_source.rb:199:i n rescue in create_default_data_source': No timezone data source could be found. ...