It appears that you are using an old browser. Certain visual elements on this website will be rendered incorrectly. To see this and all other websites on the internet as they were intended, please update to a modern web browser.
My Experience as a Ruby on Rails Developer Working With to Heroku
February 19, 2013
For those of you who aren't already familiar, Heroku
is a popular application platform that leverages Amazon's powerful EC2 (Elastic Compute Cloud). The service originally was for ruby applications exclusively but has now expanded to allow a host of other languages and frameworks.
Problems with traditional servers
Applications hosted on traditional VPSs (Virtual Private Servers) do well when the application is simple and the traffic is low. These are issues of complexity and scalability.
As applications grow more complex, they rely more and more on other programs running on the server, such as search engine daemons, mailling programs, scheduling programs, traffic monitoring services, and countless other possibilities. These programs, if not installed on the server, must be installed, compiled and configured to run on the server environment. This takes time for the developers and is error prone as server operating systems vary widely, and invariably, inconsistenciies in operating systems cause things to work differently -- which in turn causes large amounts of headache, fustration and wasted time for developers.
As applications' traffic increase, the demands on the system resources reach a breaking point. Traditional architecutres with fixed memory, fixed disk space and no load balancer, were very hard to scale. It required the development team to focus on system architecture, hardware, and configuration in ADDITION to the software development.
Heroku, and other application platforms, aim to solve these issues, complexity and scalability (among others), by providing a platform where the developers' need to account for configuration, installation, and management of system architecture is greatly reduced.
I have been using Heroku since 2010, I think perhaps not long after it opened its doors. I have found that using it has greatly streamlined my devlopment process and has reduced the pain of Ruby on Rails deployment. It is still painful to deploy Ruby on Rails applications, but Heroku makes it hurt less. Except in those cases when it makes it hurt more (see Disadvantages).
Deployment: In the best of cases, after local development and test running, I simply run `gph`, a local alias I've made that runs `git push heroku master`, and in about a minute, my application is running on the server.
Mail: Heroku integrates with Sendgrid and makes sending email (and the configuration that goes along with it). A breeze.
Price: The Developer (Free) Plan is extremely useful for a temporary hosting site, a quick proof of concept, or in the case of small websites, can even provide completely free hosting. Heroku will spin down your application on the developer plan after a certain amount idle time. This would normally spell SEO death for a website, but there are simple free tricks to avoid any downtime (I'm keeping them to myself right now). Who knows how long this will be the case, however.
Addons: This is where Heroku turns a process that used to mean long hours installing and configuring into a point and click opperation. This is largely successfull, but some configuration (minor) cannot be avoided.
Regularized Workflow: One thing I really love about an application platform, is as a developer you can spend much more time concentrating on the application logic and development than when your production environment is cconstantly changing. I've worked on hosts with many varieties of linux distributions, databases, etc. This brings up many 'new' problems that you have never seend and may never see again. With Heroku, you may choose your application 'stack' and over time, get to know it quite well. When you encounter issues, the solutions you find are applicable to the next project as well. It really does speed up development time and make me much more productive.
Price: As soon as you step out of the free plan for anything, dynos, database, addons, you will quickly realize that Heroku is, in my opinion, exceedingly expensive. I can only in good conscience recommend Heroku to clients with deep pockets. Heavy use of extra dynos and addons quickly become much more expensive than a traditional dedicated server. The only reason, in my opinion, to continue to use Heroku for apps that need lot's of addons, is if they also have high traffic, or periodic bursts of high traffic that requires quick and reliable scaling. I wish it weren't the case.
No SSH / server access: When things go wrong, a developer's first inclination is to SSH to the server and dig around. Unfortunately this level of access is unavailable. You're only recourse is to dig through the logs (of which you can only get a bits of at a time by default.
Crap Logs: Once you do get to the logs, in my opinion, you'll find that they are more cryptic than is useful. And it's not apparent how to get background processes to write to the logs.
No live or chat support: When things go wrong on heroku and the logs aren't immediately helpful, you're basically totally dependent on googling your errors and hoping that on some forum somewhere is a solution to your problem. There is no one to 'speak' to, the IRC channel is mostly a ghost town, and the email support in my experience has been slow and unhelpful. In my opinion this makes Heroku suitable only to very advanced developers who can troubleshoot their problems without help from Heroku.
No write capability: You cannot write to 'disk' from your Heroku application. You must use a 3rd party service, like Amazon S3. This is less painful that it used to be, as many community libraries (gems) now account for this eventuality out of the box. But it adds an extra layer of complexity, and has caused some great frustration for me and the Rails Asset Pipeline, in which assets are compiled at deploy time to decreace load times. I think after about a year, this seems to have been resolved. But periodically, this is still an issue for me.