InfoWorld has named Heroku as a 2012 Technology of the Year. While we're not normally much for industry awards, we feel honored to be included alongside past winners such as the iPad, Android, Visual Studio, and Eclipse; and this year's winners, including Amazon Web Services, Node.js, Hadoop, CloudBees, and Heroku add-on provider Rhomobile.
InfoWorld is a venerable publication in the technology world, and this is the first time they've given awards in the cloud space. We see this as another major point of validation for platform-as-a-service, and cloud technologies more generally. 2011 was the year that PaaS came into the greater collective consciousness of the technology industry. We can't wait to see how things will unfold in 2012.
From the Heroku Postgres Blog:
"One of the benefits of consuming a database through Heroku Postgres is that we are continually improving the service. This benefit is compounded by the fact that our service is based on PostgreSQL, a vibrant and active open source project. The release of PostgresSQL 9.1 had added a number of feature, performance and reliability improvements. These are available today with our beta support for PostgreSQL 9.1 ..."
Check out the Heroku Postgres Blog to read more.
We're happy to announce the public beta of Grails application deployment on Heroku with support for Grails 1.3.7 and 2.0 provided by the open source Heroku Grails buildpack.
Grails is a high-productivity web application framework for the JVM based on the Groovy programming language and featuring many similarities with Rails. Since its inception in 2006, the framework has enjoyed broad adoption in the Java community as it combines the strengths of the JVM and richness of the Java platform with the productivity benefits of modern frameworks like Rails.
Today the Grails team announced Grails 2.0, the latest incarnation of the framework. It features numerous large improvements including an overhauled command line tool, faster and more reliable reloads, and static asset support. Details are covered in the What's New section of the Grails docs.
The release includes the Grails Heroku plugin that provides simple commands to set up your Grails app with Heroku add-on services like Postgres, Memcached, Redis, MongoDB from MongoLabs or MongoHQ and RabbitMQ.
Create a new Grails project:
$ grails createApp HelloWorld
| Created Grails Application at /Users/jjoergensen/dev/HelloWorld
$ cd HelloWorld
Commit to Git:
$ grails integrate-with --git
$ git init
Initialized empty Git repository in /Users/jjoergensen/dev/HelloWorld/.git/
$ git add .
$ git commit -m init
[master (root-commit) bd0f36b] init
58 files changed, 2788 insertions(+), 0 deletions(-)
create mode 100644 .classpath
create mode 100644 .gitignore
create mode 100644 .project
...
Create Heroku Cedar app:
$ heroku create --stack cedar
Creating smooth-night-8061... done, stack is cedar
http://smooth-night-8061.herokuapp.com/ | git@heroku.com:smooth-night-8061.git
Git remote heroku added
Deploy to Heroku:
$ git push heroku master
Counting objects: 73, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (69/69), done.
Writing objects: 100% (73/73), 97.82 KiB, done.
Total 73 (delta 2), reused 0 (delta 0)
-----> Heroku receiving push
-----> Grails app detected
-----> Grails 2.0.0 app detected
-----> Installing Grails 2.0.0..... done
-----> executing grails -plain-output -Divy.default.ivy.user.dir=/app/tmp/repo.git/.cache war
|Loading Grails 2.0.0.
...
|Done creating WAR target/HelloWorld-0.1.war
-----> No server directory found. Adding jetty-runner 7.5.4.v20111024 automatically.
-----> Discovering process types
Procfile declares types -> (none)
Default types for Grails -> web
-----> Compiled slug size is 30.6MB
-----> Launching... done, v3
http://smooth-night-8061.herokuapp.com deployed to Heroku

Heroku's Postgres database service, the origins of which date back to 2007, is one of the most battle-tested cloud database services around.
Over the last year, our growing data team has done an amazing job of dramatically increasing the scale, reliability, and durability of the service - now boasting 99.99% (measured) uptime and over 400 million write-transactions per day.
Until now, the service has only been available to Heroku customers, but today we are pleased to announce the launch of Heroku Postgres as a standalone database service. Included in this launch is a new web interface for managing databases, as well as rock-solid durability based on Continuous Protection technology. Best of all, these improvements are effective immediately for all existing users of the Heroku Postgres add-on.
To learn more, check out the inaugural post of the new Heroku Postgres blog. Future posts to this blog will contain product updates and articles about leveraging the advantages of PostgreSQL.

Today we're happy to announce the availability of Heroku Scheduler. Scheduler is an add-on for running administrative or maintenance tasks, or jobs, at scheduled time intervals. It's the polyglot replacement of the Cron add-on, with more power and flexibility. And it's free; you just pay for the dyno time consumed by the one-off tasks.
A dashboard allows you to configure jobs to run every 10 minutes, every hour, or every day, and unlike the Cron add-on, you can control when. E.g. Every hour on the half-hour, or every day at 7:00am.
Tasks are any command that can be run in your application or even the Unix shell.
For Rails, the convention is to set up rake tasks. To create your scheduled tasks in Rails, copy the code below into lib/tasks/scheduler.rake and customize it to fit your needs.
desc "This task is called by the Heroku scheduler add-on"
task :update_feed => :environment do
puts "Updating feed..."
NewsFeed.update
puts "done."
end
task :send_reminders => :environment do
User.send_reminders
end
If you're using Python with the popular Fabric automation tool, you can define a fab clean_sessions task:
from fabric.api import task
@task
def clean_sessions():
url = urlparse(os.environ.get('REDISTOGO_URL'))
db = redis.Redis(host=url.hostname, port=url.port, password=url.password)
db.delete('myapp:sessions')
print 'done.'
For apps built on other frameworks or languages, another convention is to add a script to bin/ that will perform the task. E.g. bin/updater.
To schedule a frequency and time for a job, open the scheduler dashboard by finding the app in My Apps, clicking "General Info", then selecting "Scheduler" from the Add-ons dropdown.
On the Scheduler Dashboard, click "Add Job...", enter a task, select a frequency and next run time.
For example, add rake update_feed, select "Hourly" and ":30" to update feeds every hour on the half-hour. Then add rake send_reminders, select "Daily" and "00:00" to send reminders every day at midnight.
Existing Cron add-on users should migrate to Heroku Scheduler as soon as possible. It has more functionality, is easier to use, and is free. Cron is restricted to running a single command, rake cron and does not provide control over when daily and hourly tasks are run. Scheduler can do everything the Cron add-on does, and more.
If you want your new jobs to be scheduled as close as possible to when your Cron jobs would run, go to the Cron dashboard and look at the "Scheduled for" information. Then in the Scheduler dashboard, create a new task, set it to be either hourly or daily, and then set the Next Run field to the selection closest to the previous scheduled time. Set the task to rake cron.