The more I learn, the less I know.
Dealing with Heroku startup lag
So, if you haven’t tried Heroku yet, you really should. It has got to be the most awesome way to deploy and manage a rails app that I have ever seen. But this article isn’t another Heroku review, instead it is my attempt at getting around one minor pitfall with Heroku.
The problem? If you’re site doesn’t get much traffic, and you are on the free “1 dyno” plan, your dyno’s (rails processes) tend to go offline. This means your next visitor sees your page load for a few seconds before they see anything. It’s not terrible, but I wouldn’t call it ideal, either.
But I think I have found a simple solution to ease the “pain” of this “problem.” (Sarcasm intended): Heroku serves static files from varnish… no delay on those while we wait for the rails app to start.
So what’s happening? Someone comes along to www . my cool site . com, but there are no active dyno’s. As expected, they get sent to index.html, which fires off an AJAX request to the rails app. As soon as it gets a successful result, it redirects the user to the /home path within my rails site. Assuming there are active dyno’s, this all happens very quickly. If the dyno’s are off, a loading message fades in and a few seconds later they get redirect.
I know it isn’t perfect… but it should work until my site gets busier and I can pay for more dyno’s.
If you enjoyed this post, make sure you subscribe to my RSS feed!| Print article | This entry was posted by Scott on July 25, 2010 at 12:59 PM, and is filed under Ruby on Rails, Web Dev. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |
about 1 month ago
Some notes that I may add if I rewrite this article.
Obviously, helpers like root_url and root_path are goners. Having the index.html file there clobbers that route from ever getting used.
That said, I do suggest defining a home route. Something like:
match ‘home’ => ‘controller#action’
Then in your application controller you can define the functions root_url and root_path and have them call home_url and home_path, respectively. You should also add a helper_method call in the application controller to the new root_* methods you created.