Le service PaaS
Heroku a lancé il y a peu de temps en beta publique sa nouvelle stack,
Celadon Cedar.
Une des nouveautés apportée par cette version est le support de
node.js, framework destiné à développer des applications réseau facilement scalables en JavaScript (du côté serveur), utilisant la machine virtuelle V8.
Installation de heroku
$ gem install heroku
Application basique
On va écrire une application la plus simple possible, le but n'étant pas d'apprendre le node.js, donc un "hello world" fera parfaitement l'affaire.
var express = require('express');
var app = express.createServer(express.logger());
app.get('/', function(request, response) {
response.send('Hello World!');
});
var port = process.env.PORT || 3000;
app.listen(port, function(){
console.log("Listening on " + port);
});
Utilisation de npm
Cedar reconnait une app node.js si il y a un fichier package.json, donc même si l'application n'a pas de dépendance, il faut inclure ce fichier.
{
"name": "node-example",
"version": "0.0.1",
"dependencies": {
"express": "2.2.0"
}
}
Il est préférable de ne pas déployer le fichier node_modules, donc ajoutons le au .gitignore.
Déclaration des "process types" with Foreman/Procfile
Pour exécuter l'application, nous devons déclarer la commande à utiliser pour la lancer, donc simplement lancer notre script.
Dans le fichier
Procfile :
web: node web.js
On peut donc maintenant lancer l'appli avec
Foreman
$ gem install foreman
$ foreman start
14:39:04 web.1 | started with pid 24384
14:39:04 web.1 | Listening on 5000
L'application est donc accessible sur le port 5000.
Déploiement
Heroku nécessitant git, la première chose à faire est de versionner l'application :
$ git init
Initialized empty Git repository in .git/
$ git add .
$ git commit -m "new app"
Created initial commit 5df2d09: new app
Ensuite, il faut créer l'application
Heroku sur la plateforme, via l'api en ligne de commande :
$ heroku create --stack cedar
Creating radiant-river-296... done, stack is cedar
http://radiant-river-296.herokuapp.com/ | git@heroku.com:radiant-river-296.git
Git remote heroku added
Une application appname vierge nous attend donc chez
Heroku, il suffit de pousser notre application avec git pour la voir en ligne immédiatement :
$ git push heroku master
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (9/9), 923 bytes, done.
Total 9 (delta 2), reused 0 (delta 0)
-----> 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
http://radiant-river-296.herokuapp.com deployed to Heroku
To git@heroku.com:radiant-river-296.git
* [new branch] master -> master
Avant de voir notre application en ligne, il faut la scaler :
Before looking at the app on the web, we’ll need to scale the web process:
$ heroku ps:scale web=1
Scaling web processes... done, now running 1
Now, let’s check the state of the app’s processes:
$ heroku ps
Process State Command
------------ ------------------ --------------------------------------------
web.1 up for 10s node web.js
The web process is up. Review the logs for more information:
$ 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
Tout est ok, notre app est accessible, on peut l'ouvrir via un simple
heroku open.