We use capifony, a Symfony-tailored version of Capistrano.<p>Because our workflow utilized git flow, we do the majority of our work in feature branches, submit PRs, and then merge those to develop when TravisCI says it passes.<p>Once on develop, we "cap staging deploy" and run any final tests using Testacular, Selenium, or just by hand.<p>Most of the time, though, all we do is eyeball the code changes on develop, confirm tests pass in TravisCI, and do a release on master and then "cap production deploy".<p>Database migrations are handled automatically via Doctrine with each deployment with rollback support.<p>Sessions are pooled, and there haven't been any issues between releases. NewRelic is our primary indicator for a successful release.<p>Using this method, we deploy 6+ times a day, and haven't had the the time to automate it all yet :)