Although code deployment might not be as easy with Engine Yard as with Heroku, the Engine Yard platform is dramatically more tunable. In fact, in many ways, Engine Yard is closer to an infrastructure as a service (IaaS) than a platform as a service (PaaS). Engine Yard provides a base infrastructure tuned to run Ruby applications, but the rest is up to you. Engine Yard does offer Git integration; however, deployment is not executed via a push, as in Heroku, but rather via Engine Yard's suite of tools and its extensive dashboard, which can sync with a Git repository.
With Engine Yard, you're given fine-grained access to a scalable cloud infrastructure living on top of Amazon's EC2. For instance, you can deploy an application to a target Amazon global availability zone, and you can schedule backups of an application's data store -- neither of which you can achieve with Heroku. You have full access to the underlying hardware via SSH and root access. With this level of control, you have freedom to tweak various aspects of a Ruby application stack that is not available in Heroku's sandboxlike environment.
By default, an Engine Yard application has a larger capacity to scale when compared to Heroku; an application deployed to Engine Yard lives on a managed EC2 image with a larger memory and storage footprint, while a deployment to Heroku is provisioned to a smaller abstract slice of computing capacity within a managed EC2 cluster. Further, with Engine Yard, you have total control over how much memory or disk space your application has available to it -- details that are hidden in Heroku.
Engine Yard: Under the hood
Getting started with Engine Yard is slightly different than with Heroku. With Engine Yard, there is no free model; instead, there is a trial, limited to 500 hours. As with Heroku, there is a default configuration for a trial account. In Engine Yard's case, trial accounts are provisioned a medium compute instance, which maps to Amazon's High-CPU Medium instance. In essence, this means a trial account receives a dual-core, 32-bit virtual machine that has 1.7GB of memory and 350GB of storage. Data storage is colocated in Amazon EBS.
Engine Yard supports a wide variety of compute options and corresponding pricing other than the standard medium instance. Naturally, the higher the resource specifications (that is, memory and storage), the higher the hourly cost. For instance, on the low end, a small instance -- which is 32-bit, with 1.7GB of memory, 160GB of storage (which isn't backed by EBS), and essentially a single CPU core -- will cost 12 cents per hour. On the high end, a 64-bit instance with 68.4GB of memory, 1,690GB of nonpersistent storage, and 26 CPU cores will cost $2.74 per hour. These instances are Unix-based and specifically tuned to run Ruby applications; thus, the price per hour will be slightly more than if you took the same mapping of a raw AWS EC2 instance.
Engine Yard's documentation is excellent. From extensive tutorials to videos to podcasts, the Engine Yard platform is explained in detail at all levels. For instance, there are detailed sections on the overall platform architecture, troubleshooting, dealing with databases, and migrating to the platform, just to name a few. What's more, the Engine Yard team's extensive involvement in the community via projects such as JRuby has yielded a host of resources for all aspects of Ruby and Rails development -- webinars that educate developers, for instance, on Ruby dependency management via bundler and even beginning Rails development. In short, Engine Yard provides a path for development teams to grow into Ruby, as well as the Engine Yard platform.
Engine Yard supports Ruby and JRuby, offers a separate PHP platform, and recently announced support for Node.js. Indeed, the best-known lead developer of the JRuby project is an employee of Engine Yard. Because the Engine Yard platform provides a raw computing instance with SSH access and root privileges, you are free to install other applications, packages, and languages. Thus, while Engine Yard doesn't offer the breadth of language support as Heroku, you could certainly add Python applications to an Engine Yard managed instance, provided you wanted to maintain the infrastructure in that case. Nevertheless, the core competency of application support with Engine Yard is primarily limited to Ruby and JRuby. Note that Heroku does not support JRuby at this point.
Engine Yard: Extensive management
The strength of Engine Yard when it comes to infrastructure management lies in its extensive dashboard. Nevertheless, Engine Yard does offer a command-line utility for managing most aspects of application deployment. Via the Engine Yard command-line utility, you can deploy an application, disable an application (and re-enable after maintenance), view logs, and SSH to a running instance, for example.
Applications deployed to the Engine Yard platform can be easily monitored via tools provided by Engine Yard. Not only can Engine Yard's monitoring suite alert you if a Web application stops responding, but you can also view detailed traffic reports. Engine Yard can monitor almost everything a system administrator would want to keep an eye on, including I/O wait time, memory usage, and disk space. What's more, Engine Yard offers application monitoring via New Relic, which enables detailed analysis of code.
Applications running on Engine Yard have access to a MySQL database instance that is fully functional and available for all management tasks one could conceive with respect to running an RDBMS. You can access this instance from outside Engine Yard, and you can schedule backups and retrieve those backups on demand.