Dans cette série, je vous propose la création d'une application de tableaux Kanban en sortant un peu des sentiers battus avec AngularJs, NancyFx, Petapoco, Heroku...

Cette première partie sera dédiée au setup de notre solution NancyFx sur Heroku.

Prérequis

Pour la suite de cet article, vous devez :

NancyFx

NancyFx est un framework web alternatif pour .NET et Mono. Il permet de construire des services HTTP facilement, rapidement à la manière d'Express ou de Sinatra.

IIS ne tournant pas sur Linux :p, nous allons utiliser un des composants du projet Katana pour hoster notre application. Pour information, Katana est une des implémentations de la spécification OWIN et je vous conseille d'y jeter un coup d’œil si vous l'avez loupé.

Créons une nouvelle application de type console :

Image

Ajoutons les packages suivant avec NuGet :

  • Install-Package Microsoft.Owin.Hosting -Version 2.1.0
  • Install-Package Microsoft.Owin.Host.HttpListener -Version 2.1.0
  • Install-Package Nancy.Owin

Ajoutons le fichier Startup.cs :

class Startup
{
  public void Configuration(IAppBuilder app)
  {
    app.UseNancy();
  }
}

Modifions le fichier Program.cs :

class Program
{
  private static ManualResetEvent _quitEvent = new ManualResetEvent(false);

  static void Main(string[] args)
  {
    int port = 5000;

    if (args.Length > 0)
    {
      int.TryParse(args[0], out port);
    }
    Console.CancelKeyPress += (sender, eArgs) =>
    {
      _quitEvent.Set();
      eArgs.Cancel = true;
    };

    using (WebApp.Start<Startup>(string.Format("http://*:{0}", port)))
    {
      Console.WriteLine("Started");
      _quitEvent.WaitOne();
    }
  }
}

Ajoutons maintenant un module Nancy HomeModule.cs :

public class HomeModule : NancyModule
{
  public HomeModule()
  {
    Get["/status"] = _ => "I am alive";
  }
}

Lancez l'application en tant qu'administrateur et allez sur http://127.0.0.1:5000/status avec votre navigateur préféré.

Image

Heroku

Ajoutons un fichier Procfile à la racine de notre solution. Ce fichier sert à expliquer à Heroku comment démarrer notre application et le port sur lequel notre application doit écouter :

web: mono KanbanBoard.exe $PORT

De la même façon, ajoutons un fichier .gitignore pour ne pas commit les dossiers packages, bin et obj :

[Oo]bj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
packages/
*.nupkg

Activons le restore package de NuGet :

Image

Et maintenant, déployons le tout. Ouvrons une invite de commande :

Initialisation du dépôt Git :

$ git init

Connexion à Heroku :

$ heroku login

Création de l'application sur Heroku et configuration du dépôt distant :

$ heroku apps:create mickael-metesreau-kanban-board
$ git remote -v

Image

Les applications utilisant Mono n'étant pas prises en charge nativement par Heroku, il est nécessaire de spécifier comment construire notre application :

$ heroku config:add BUILDPACK_URL=https://github.com/friism/heroku-buildpack-mono/

Il ne nous reste plus qu'à commit puis push sur Heroku :

Commit des fichiers de notre solution :

$ git add -A
$ git commit -m "Initial commit"

Déploiement :

$ git push heroku master

Image

Une fois la résolution des dépendances et le build fait, l'application est disponible sur heroku :)

Image

Conclusion

Déployer une application Mono sur Heroku est extrêmement simple et rapide. Je trouve la centralisation de la gestion du versionning et du déploiement avec Git malin et très plaisant à utiliser. Enfin, Heroku offre pour moi l'avantage de disposer d'une infrastructure sans aucun coût afin de setup une application lors de mes développements.

Dans la seconde partie, nous allons formaliser l'API REST de notre système puis ajouter une couche de persistance avec Petapoco et Heroku Postgres.