Super psyched to announce a major new version of Heroku, the Celadon Cedar stack, going into public beta today (previous stacks were Argent Aspen in 2009, and Badious Bamboo in 2010).
Cedar has many new features and updates, but most importantly introduces a new way of thinking about web application architecture and scaling apps on Heroku: the process model. Check it out:
$ heroku create –stack cedar
Creating blazing-galaxy-997… done, stack is cedar
https://blazing-galaxy-997.herokuapp.com/ | git@heroku.com:blazing-galaxy-997.git
$ cd myapp/
$ cat Procfile
web: bundle exec rails server mongrel -p $PORT
worker: bundle exec rake resque:work QUEUE=*
urgentworker: bundle exec rake resque:work QUEUE=urgent
tweetscan: bundle exec ruby tweetscan.rb
cron: bundle exec clockwork clock.rb
$ heroku scale web=4 worker=2 urgentworker=2 tweetscan=1 cron=1
Scaling processes… done
$ heroku ps
Process State Command
————- ————— ————————————
web.1 up for 6s bundle exec rails server mongrel …
web.2 up for 5s bundle exec rails server mongrel …
web.3 up for 4s bundle exec rails server mongrel …
web.4 up for 5s bundle exec rails server mongrel …
worker.1 up for 5s QUEUE=* bundle exec rake resque:work
worker.2 up for 4s QUEUE=* bundle exec rake resque:work
urgentworker.1 up for 5s QUEUE=urgent bundle exec rake re …
tweetscan.1 up for 5s bundle exec ruby tweetscan.rb
cron.1 up for 4s bundle exec clockwork clock.rb
$ heroku logs –tail
2011-05-31 04:04:40 heroku[api] Deploy fee72fc by james@example.com
2011-05-31 04:04:40 heroku[api] Release v5 created by james@example.com
2011-05-31 04:04:41 heroku[slugc] Slug compilation finished
2011-05-31 04:04:41 heroku[web.1] State changed from created to starting
2011-05-31 04:04:42 heroku[web.1] Running process with command: `bundle exec rails server mongrel -p 31878`
2011-05-31 04:04:43 app[web.1] >> Listening on 0.0.0.0:50600, CTRL+C to stop
2011-05-31 04:04:44 heroku[web.1] State changed from starting to up
2011-05-31 04:04:44 heroku[worker.1] State changed from created to starting
2011-05-31 04:04:45 heroku[worker.1] Running process with command: `QUEUE=* bundle exec rake resque:work`
2011-05-31 04:04:45 heroku[worker.1] State changed from starting to up
2011-05-31 04:04:45 heroku[web.2] Running process with command: `bundle exec rails server mongrel -p 31878`
2011-05-31 04:04:46 heroku[worker.2] Running process with command: `QUEUE=* bundle exec rake resque:work`
2011-05-31 04:04:46 heroku[worker.2] State changed from created to starting
2011-05-31 04:04:47 heroku[web.2] Running process with command: `bundle exec rails server mongrel -p 31878`
2011-05-31 04:04:47 heroku[worker.2] Running process with command: `QUEUE=* bundle exec rake resque:work`
2011-05-31 04:04:48 heroku[router] GET sushi.heroku.com/ dyno=web.1 queue=0 wait=0ms service=8ms bytes=179
2011-05-31 04:04:48 app[web.1] 66.75.123.123 – – [15/May/2011 04:05:03] “GET / HTTP/1.1” 200 1 0.0009
2011-05-31 04:04:49 app[worker.1] (in /app)
…
$ heroku run rake db:migrate
Running `rake db:migrate` attached to terminal… up, ps.1
(in /app)
Migrating to CreateWidgets (20110204210157)
== CreateWidgets: migrating ==================================================
— create_table(:widgets)
-> 0.0120s
== CreateWidgets: migrated (0.0121s) =========================================
$ heroku run ruby scripts/fix_bad_records.rb
Running `ruby scripts/fix_bad_records.rb` attached to terminal… up, ps.2
$ heroku run console
Running `console` attached to terminal… up, ps.3
Loading production environment (Rails 3.0.3)
irb(main):001:0>
$ cd my-node-app/
$ ls
package.json Procfile web.js
$ cat Procfile
web: node web.js
$ git push heroku master
—–> Heroku receiving push
—–> Node.js app detected
—–> Vendoring node 0.4.7
—–> Installing dependencies with npm 1.0.6
mime@1.2.2 ./node_modules/express/node_modules/mime
connect@1.4.1 ./node_modules/express/node_modules/connect
qs@0.1.0 ./node_modules/express/node_modules/qs
express@2.1.0 ./node_modules/express
Dependencies installed
—–> Discovering process types
Procfile declares types -> web
—–> Compiled slug size is 3.1MB
—–> Launching… done, v4
https://radiant-river-296.herokuapp.com deployed to Heroku
$ heroku ps
Process State Command
———— —————— ——————————————–
web.1 up for 10s node web.js
$ heroku logs
2011-03-10T10:22:30-08:00 heroku[web.1]: State changed from created to starting
2011-03-10T10:22:32-08:00 heroku[web.1]: Running process with command: `node web.js`
2011-03-10T10:22:33-08:00 heroku[web.1]: Listening on 18320
2011-03-10T10:22:34-08:00 heroku[web.1]: State changed from starting to up
$ heroku run node
Running `node` attached to terminal… up, ps.1
>
We’re really excited about the foundation all of this lays for the great stuff we’ll be releasing over the coming months. We will be following up this post with a detailed look at each of the major new areas over the next couple of weeks.
Enjoy.