Imagine a bacon-wrapped Ferrari. Still not better than our free technical reports.

LiveRebel 2.6 Sneak Peek: Release Code, DB & Config Updates In-Sync

State of the art in deployment automation doesn’t look very artsy. Popular tools, like Fabric or Capistrano, just let you execute scripts in a fancy way for Python and Ruby.

But LiveRebel is different: instead of scripts, it talks in terms of applications, servers and the deployment process in general. And with the addition of general file-based deployments in LiveRebel 2.6, applications on any platform can enjoy the domain-driven mindset.

I thought hard about the features I should discuss in this post. Eventually I arrived at the conclusion that developers are not so unlike. You’ve probably shared all the painful experiences I’ve had as a past web enthusiast. At least that’s the way I’ve felt when talking about it in PHP, Python and Ruby on Rails circles. So here it goes: these are the LiveRebel features I wish existed when I was earning my living as a PHP developer.

Deployment Automation on Steroids

When you press that shiny ‘deploy’ button in LiveRebel, the gears start to turn and the application gets updated. But this doesn’t seem much different from an easy ssh + git pull. Well, as the application grows, the deployment process remains just as simple with LiveRebel. Configuration scripts make easy to customize the deployment process with any executable file. Need to run Chef or Capistrano for provisioning? Update the database? Run a Selenium test suite once the application is deployed? Just add the script into the right directory and LiveRebel does all the heavy-lifting.

As an example, let’s look at running a Selenium test suite to verify that the main functionality works in production.

It’s that simple! LiveRebel also manages script versions to avoid conflicts, e.g. by default they are executed once per server. Because we want our tests to be run on every deployment, I’ve added always to the path. If one-click deployments are not automated enough for your tastes, try out our Jenkins and Bamboo plugins, CLI or REST API.

Failure Tolerant

Software failures are inevitable. And if you’re ill-prepared, you can expect downtime, angry end-users, hours of puzzle solving and probably a phone call in the middle of the night.

But it doesn’t have to be this way. LiveRebel is a gentleman, so when things go awry, it rolls back to the previous version. And it covers the whole application: configuration scripts, managed database migrations and application files are all reverted. So with a bold mindset, you could even deploy each commit, run the Selenium suite on each deployment and count on LiveRebel to react to any failures. And once you have time to fix the errors, LiveRebel gives you a detailed overview of each operation.

Database Migrations

The benefits of code revision control apply equally to databases. Unfortunately the adaption is nowhere near. So we decided to try to change this. We took a great language-agnostic database migration tool — Liquibase — and supercharged it for deployments:

  • Detect database changes before deployment
  • Check for backwards compatibility and data loss
  • Apply database changes automatically
  • Revert changes back on downgrade or rollback


It’s easy to get started, as Liquibase can map your existing database with just a single command. Learn more about Liquibase from an overview I wrote and about LiveRebel enhancements here.

Keeping Tabs on Deployments

How many teams know exactly which application version is in production? Most of the people I’ve met are lucky enough if there’s a manually updated document to track this and modifications aren’t made in the live environment. This is obviously troublesome: critical live modifications might get lost, inappropriate database changes applied and it’s hard to debug if you’re unsure in which version the errors appear.


LiveRebel gives an one page overview of all the applications and versions on all the servers and even databases.

Transparent Environment Configuration

I’ve seen so many attempts to tackle environment-specific configuration problems, yet nothing has come close to satisfaction. Most often you just manually create a file, or if you’re evolved, use Chef to copy the file for you. Or if you’re lucky and have small number of environments, you can bundle everything with the application and switch between them based on some parameter. But then the code is a mess.

LiveRebel takes a robust approach: add a file with property placeholders in liverebel directory and during deployment, properties get injected and the file copied in the application directory. Properties are stored in a Git repository (history for free) and can be defined per server or per server group.

Read a dedicated blog post for more details.


LiveRebel takes automated deployment much further than fancy scripts ever could. A one-page overview gives you a single control center for applications and servers, and automated rollbacks make failures a non-issue so you can focus on product development instead of firefighting. Simple deployment customization, database migrations and environment configuration give out-of-box solutions for common annoyances. And this is just the beginning.

So go ahead and give it a try — it takes just minutes to set up and you’ll never want to go back. You can grab the latest from our download page (make sure to choose 2.6+). Or you can use the PHP demo app in Yii Framework with an easy-to-set-up demo environment (uses Vagrant and Virtualbox) to play around with LiveRebel features.

Join our webinar on March 14 to be the first to see LiveRebel 2.6 in action!

  • tedmyoung

    I don’t understand the sentences under database migrations:

    >The benefits of code revision control apply equally to databases. Unfortunately the adaption is nowhere near.

    Huh? Can someone please rewrite that?

  • Hey, what I meant is — the benefits of tacking database structure in a VCS, are the same as the benefits of tracking source code. For some reason however, it is not as common practice.

  • zebb

    Perhaps you meant “adoption”?