SwitchPipe: My New Rapid and Easy Way To Deploy Web Apps
It's not very often I get to announce my own work here, but SwitchPipe is a new project I've been working on since my "No True mod_ruby Is Damaging Ruby's Viability On The Web" post. It was Ruby Inside's most commented-on post yet and inspired a lot of discussion about the state of deploying Ruby apps online, and got me to thinking about how to build something to achieve ultra-easy Ruby Web app deployment.
SwitchPipe is a proof of concept Web application process manager and request proxy. Backend Web applications are loaded into their own processes, making SwitchPipe language and framework agnostic. HTTP requests are proxied at the TCP level using information extracted from the HTTP headers to establish which backend application is requested. Unlike dispatch / proxying tools that take a totally different approach (such as the wonderful Swiftiply), SwitchPipe is not designed for raw performance, but ease of use and simplicity. You don't have to think about port numbers (beyond the one that SwitchPipe resides on!), starting or stopping backend apps, and a whole lot of other dull stuff. You can even run a full demo of SwitchPipe once you've checked it out via SVN (or downloaded the tarball) with a single command (it'll even install the dependencies!).
SwitchPipe is not the solution, but it's a solution, and one that is well suited to certain types of environment. I've been running several Rails applications live using SwitchPipe and deploying new versions is as simple as an svn checkout.. no restarts, nothing. Adding a new Rails app (or Merb, or Ramaze, or whatever) to SwitchPipe is a case of uploading, creating a config file, and that's it.. you don't even have to restart SwitchPipe!
It's early days for SwitchPipe, but I'm pretty happy with it just for the major benefits it's provided me in deploying various Ruby-backed Web apps, so hopefully a few other people will find a use for it. If you do, make sure to join its Google Group! And yes, it will also be available via Git soon.