As an avid fan of
Heroku I've used it to host many websites, from very simple ones with a low amount of visits to very complex applications with a large amount of traffic.
However if you are creating your first website with Heroku you may run into a problem. Heroku uses 'Dynos' to run your website, think of them much like a single processor. The more dynos you have the more processing power you have at your disposal. With Heroku you get 1 months worth of a single dyno use for free.
The problem comes when no one has visited your site for an hour. After an hour your dyno will shut down to save Heroku's resources. If someone then visits your site it will take 5-10 seconds to spool up the dyno and get it serving the users requests. This obviously causes a delay which as us web developers know, any unnecessary delays are unacceptable. Speed matters.
How to get around this?
The best way around this is to keep your Heroku app awake. For this I used the Heroku scheduler add-on:
This works much like a Cron Jobs but has a few additional features.
First, add Heroku Scheduler to your desired app. Then go to the admin for that application and enter the Heroku Scheduler management area from the 'Add-on' drop down menu
.
This screen is where we manage what tasks to run and when. I've called this task 'Call_page' as it will be simply calling our heroku app's index page. We will schedule it to run once an hour to keep the app alive.
We now need to add in the code for this task:
Make a new file called 'scheduler.rake' in
app/lib/tasks
Within this page put your code:
desc "This task is called by the Heroku cron add-on"
task :call_page => :environment do
uri = URI.parse('http://www.myapp.org/')
Net::HTTP.get(uri)
end
As you can see this is a fairly simple bit of code that simply calls your page.
That's all! Your app will now stay awake.
Is it free?
Most likely yes, with each Heroku app you receive 450 free hours of dyno time each month. As 1 dyno is always running this will leave you with a few hours of free dyno time each month. Heroku charges $0.05 per hour per dyno pro-rated to the nearest second. As this task takes around 5 seconds of dyno worker time that's 2 minutes per day, 14 minutes a week and 1 hour per month. Easily within your allowance.
Beo is a London based Ruby on Rails development company. Find us at www.beo.so