I never got into Heroku myself, as a newbie Rails developer (and a newbie develper for that matter) my very first deploy was on a Apache + Passenger stack. This was a couple of years back, but I seem to recall drinking a lot of caffeine and swearing a lot! It was an extremely valuable experience though. Before I did my first deploy, how web applications worked in a live environment was such a foreign concept for me.
A couple of months back I got my first taste of DevOps by way of Chef solo and Capistrano for automated server provisioning and deploys. I’m no expert, but I highly suggest not trying to tackle everything at once. I would first start with setting up a staging environment with your choice of infrastructure and getting an application running on that. Once you’re satisfied with the your production environment and you have a good understanding of how everything came together you can takes steps toward automating setup and deployment.
You’ll need a IaaS provider to host this on, of which there’s over 1001 different options to choose from. Personally, I recommend Digital Ocean, they seem to be cheaper than EC2 and they have plenty of documentation and a pretty solid API and they don’t screw you over for bandwidth (seriously, their cheapest instance gives you
1TB of outbound transfer for free!). Though, I advise you do some extensive research on this front first, and find a provider that best matches your needs. If you don’t really know what your needs are, you can always start with something cheap, watch your traffic for a month and scale up/down/left/right easily if you’re using something like Chef or Puppet.
As for Apache/Nginx, Unicorn vs thin vs puma vs passenger, etc. Though it’s a really cliche answer, which of these tools is best for you really depends on the job and your individual requirements. You should research all of them and find the pros/cons of each. There was a very helpful stackoverflow answer on the subject which will probably be the first thing to come up with a quick google search. If like me, you learn best by example and experiencing things firs hand then I would recommend doing your first deploy w/ Apache/Passenger, it’s probably the easiest combo to get up and running and you’ll find TONS of DIY posts online.
Personally I used this blog post when I was getting into Chef for the first time. There’s a lot of stuff in there specific to that guys application, but it should give you a solid example of getting a rails application deployed to a fresh VPS from start to finish w/ Chef + Capistrano. In fact, if you take out all the jetty/solr stuff from the equation you can more or less use the same provisioning/deploy strategy down to the tee for a solid web stack on Digital Ocean using Nginx + Unicorn.