Migrating to the Celadon Cedar-14 Stack

Last Updated: 17 June 2015

cedar cedar-14 migrate

Table of Contents

The Cedar-14 stack is the latest version of the Heroku Cedar stack. It features updated system dependencies and runs on a recent version of Ubuntu Linux.

This article covers how to upgrade from Cedar to Cedar-14. If you are looking to upgrade from Bamboo to Cedar-14, please refer to Migrating to the Celadon Cedar-14 Stack from Bamboo article.

Due to changes in the glibc library on Cedar-14, apps may see different memory consumption behavior on that stack. See the Performance Differences section for details.


Create Cedar-14 app

Before upgrading an existing application to Cedar-14, you should test the upgrade on a Cedar-14 staging app that is not getting production traffic. You can create a staging app to use for testing, let’s call the git remote heroku-cedar-14 and the app cedar-14-app:

$ heroku create --remote heroku-cedar-14 --stack cedar-14 cedar-14-app
Creating cedar-14-app... done, stack is cedar-14
http://cedar-14-app.herokuapp.com/ | git@heroku.com:my-app.git
Git remote heroku-cedar-14 added

Also add any add-ons (with heroku addons:create) and config (with heroku config:set) to the app that’s required for your code to run.

Deploy to your Cedar-14 staging app

Deploying to the new Cedar-14 staging app will not affect your currently running app on Cedar. It will merely stage the source code in a separate app and provide the opportunity to verify functionality.

Push the source to the heroku-cedar-14 remote repository.

$ git push heroku-cedar-14 master
Counting objects: 67, done.
-----> Ruby app detected
-----> Compiling Ruby/Rack

Once the app is deployed, you should verify that it is working correctly on the Cedar-14 stack, and if not, make any required changes.

Upgrading the production app to Cedar-14

Once you have verified that your source code works correctly on the Cedar-14 staging app, you are ready to update the production app from Cedar to Cedar-14.

First, set stack on the production app to Cedar-14:

$ heroku stack:set cedar-14
stack set, next release on production-app will use cedar-14
Run `git push heroku master` to create a new release on cedar-14

This does not immediately change the runtime stack of the app, but the next release created will be deployed on Cedar-14. If you have no changes to your source pending release, you can create an empty commit with no changes to ensure a new build:

$ git commit --allow-empty -m "Upgrading to Cedar-14"
[master 973c3f7] Upgrading to Cedar-14

To create the new release, push to your production app:

$ git push heroku master

Your production app is now running on Cedar-14, and you should verify that everything is working as expected.

The migration is now complete.

Reverting to Cedar

If the production app is not working after you changed the stack to Cedar-14, you can temporarily revert back to the Cedar stack until you’ve debugged and resolved the issue.

First you need the release version of the previous Cedar release:

$ heroku releases
=== production-app Releases
v13  Deploy 973c3f7                  joe@example.com   2014/07/09 10:55:16
v12  Deploy ddb317d                  jill@example.com  2014/07/07 10:46:26

By rolling back, the stack will automatically be reverted to the stack the rollback release was created on.

$ heroku rollback v12

Your production app is now running on Cedar again.

If your app fails to build on Cedar-14 and you want to keep using Cedar, simply run heroku stack:set cedar to have future builds and releases targeted at Cedar.


Updated Ubuntu packages

To see what has been updated, please refer to list of updated packages.

Performance differences on Cedar-14

In testing, we’ve generally found that apps are faster on Cedar-14 than on Cedar. Some types of apps may consume more memory, however. Please see the Tuning glibc memory behavior article for details. We also recommend that you monitor memory consumption for a period after moving production apps to Cedar-14, to make sure the app performs correctly.