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.