Mar 292013
 

Il y’a quelque temps, j’ai écris un article sur le déploiement d’une application Play Framework sur Heroku.

Aujourd’hui j’aimerai vous présenter un acteur français, Clever Cloud, qui se positionne sur le même créneau, la plateforme “Cloud”, de type “PaaS” (Platform as a Service)proposant la possibilité de déployer vos applications (Play 1.2.x et Play 2, mais aussi Java + Maven, PHP, Node.js et bientôt Ruby) avec une base de données MySQL ou PostgreSQL associées.

Après avoir créé un compte gratuit, il vous faut configurer votre clé SSH.

Viens ensuite le moment de la création de votre application sur la plateforme de Clever-Cloud.

En vous connectant à votre espace, vous devez créer une application via le menu “Add an app +” de la barre de menu.

Renseignez ensuite les informations de votre application :
1

L’étape suivante vous propose de choisir parmis les différents environnements possible :
2

Dernière étape, une vérification des informations et une validation :
3

Une fois l’application créée, Clever-Cloud vous présente les informations du repository Git qu’il met à disposition :
4

De retour sur votre machine, dans une commande shell, créez votre application Play :

Gitifiez votre projet :

Enfin ajouter un adresse remote à votre repo git local :

Un Hook Git vous affiche même un message :


De retour sur la console de Clever-Cloud, vous pouvez accéder à votre application via une url mise à disposition (ou bien configurer votre propre dns)
5

Enfin CleverCloud vous propose une interface pour voir les logs :
6

Vous pouvez aussi choisir un service de Base de données (MySQL ou PostgreSQL) :
7

Maintenant vous devez démarrer votre application
8

9

Et voilà votre application est déployée et en fonctionnement. Vous pouvez vous rendre à l’adresse que clever-cloud met à votre disposition (dans le panel “Domain Names”)

Bravo à Clever-Cloud pour leur interface simple et pratique d’emploi (et leur réactivité en cas de question)

Sep 282012
 

Je viens d’être confronté à un problème lors de l’exécution des tests Fonctionnels d’une application Play!> avec la base de données MySQL (alors qu’avec H2 le problème n’apparaît pas).

Sur un projet Play!> 1.2.5 avec MySQL (InnoDB), j’ai souhaité réaliser un test fonctionnel, pourtant très simple (un model User, un controller et une classe de test du controller), et pourtant j’ai été confronté à l’erreur suivante :

Visiblement, lors de l’exécution du tests fonctionnel, la couche Controller ne semblait pas trouver de résultat, alors que la couche de test en trouvait…

Je vais essayer de vous montrer ici mon analyse du problème et une solution pour le contourner.

Pour les plus flemmard, voici un zip du projet.

Avant toute chose, créons une base de données (et un utilisateur) sous MySQL :

Puis créons une application Play!> standard:

Modifions quelque peut le fichier de configuration :
application.conf

Et codons ensuite les 3 classes qui nous interessent :

app.models.User

app.controllers.Application

test.ApplicationTest

Lançons ensuite les tests. Nous nous attendons à avoir un résultat (dans la console) proche de celui ci :

Mais pour une raison que je n’explique pas trop voilà le résultat obtenu :

Et le Test échoue lamentablement…

Alors qu’en base de données la donnée existe bien.

Le problème semble être que deux transactions indépendantes sont en cours (une pour le test et une pour le controller) ou quelque chose du genre.

Je vous avoue que je n’ai pas encore eu beaucoup de temps pour fouiller dans le code source de Play!> pour chercher d’où cela peut venir, mais j’ai au moins une solution pour pallier au problème

Vous devez donc modifier le mode de chargement des données initiales dans votre test fonctionnel avec le code suivant :
test.ApplicationTest

En effet, le chargement au sein d’un Job semble contourner le problème et permettre d’exécuter le test et d’obtenir le résultat escompté.

Et maintenant le test passe

Si jamais l’un d’entre vous avait ne serait-ce qu’une idée, n’hésitez pas à partager avec nous !

Sep 142012
 

Je vous présente aujoud’hui un petit script bash que j’utilise pour lancer mes applications Play!> au démarrage de mon serveur Ubuntu.

En effet, quoi de plus pénible qu’une application Play!> qui ne se relance pas en cas de restart d’un serveur.

Voilà donc le script shell que j’utilise sur mon serveur Ubuntu :
ex : /etc/init.d/play-monapplication

Ne pas oublier de rendre exécutable votre script :

sudo chmod +x /etc/init.d/play-monapplication

Ensuite on ajoute ce script au services de la machine

sudo update-rc.d play-monapplication defaults

ps : pour mémoire, pour supprimer un script des services

sudo update-rc.d -f play-monapplication remove

Jul 232012
 

Après une installation fraiche d’Ubuntu 12.04, je me retrouve avec cet icone dans le system tray :

Après avoir pas mal cherché comment enlever cet icône (pas de clic droit / supprimer …) j’ai enfin trouvé comment faire! Voici la marche à suivre :
Menu Système / “Paramètres Système”

Cliquer sur le menu “Accès universel”

Dans l’onglet “Saisie”, décocher l’option “Activer les fonctionnalités d’accéssibilité à partir du clavier”

Et voilà l’icône a disparu.

Jun 252012
 

Je ne sais pas vous, mais dans ma carrière, j’ai eu à mettre en production de nombreuses applications web. Actions qui pouvaient prendre beaucoup de temps en fonction du nombre d’intermédiaire ou de la procédure “sécurisé” de mise en production.

Et bien quand j’ai eu l’occasion d’essayer la plateforme Heroku, j’ai tout simplement halluciné !

Heroku est une plateforme dite “Cloud”, de type “PaaS” (Platform as a Service). Elle vous offre la possibilité de déployer vos applications (Java Servlet, Rails, Node.js mais aussi Play! Framework) avec une base de données PostgreSQL associées.

J’ai donc voulu voir si c’était vraiment utilisable. Après avoir ouvert un compte Gratuit chez Heroku, j’ai paramétré mes clés SSH comme il le fallait, j’ai ensuite essayer de livrer en production une application Play! Framework from scratch.

ps : n’est pas comptabilisé dans le temps, l’installation de Java et de Play! Framework, considérant que cela fait partie de mon environnement de travail.

Le mode opératoire est le suivant :

  • Installation du Heroku Toolbelt
  • Création d’un nouveau projet avec Play! Framework
  • Connexion à Heroku
  • Création de l’instance sur la plateforme heroku
  • Git init -> add . -> commit
  • Git push sur le repository mis à disposition par héroku
  • Ouverture du navigateur

Résultat:

Début : 16:13:35
Fin : 16:18:20
Soit 04 Minutes 45 Secondes

En moins de 5 minutes vous avez une application Play Framework Up and Ready, accessible sur le Net, avec une base de données…


Voilà la trace de mon expérimentation pour les curieux

nicogiard@bespin:~/workspace$ date
lundi 25 juin 2012, 16:13:35 (UTC+0200)

nicogiard@bespin:~/workspace$ wget -qO- https://toolbelt.heroku.com/install.sh | sh
...

nicogiard@bespin:~/workspace$ play new playOnHeroku
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.2.4, http://www.playframework.org
~
~ The new application will be created in /home/nicogiard/workspace/playOnHeroku
~ What is the application name? [playOnHeroku]
~
~ OK, the application is created.
~ Start it with : play run playOnHeroku
~ Have fun!
~
nicogiard@bespin:~/workspace$ cd playOnHeroku

nicogiard@bespin:~/workspace/playOnHeroku$ cp ../Procfile ./

nicogiard@bespin:~/workspace/playOnHeroku$ heroku login
Enter your Heroku credentials.
Email: monCompte@heroku
Password (typing will be hidden):
Authentication successful.

nicogiard@bespin:~/workspace/playOnHeroku$ heroku create --stack cedar
Creating falling-night-3220... done, stack is cedar
http://falling-night-3220.herokuapp.com/ | git@heroku.com:falling-night-3220.git
! New default stack: Cedar. To use Bamboo, run `heroku create -s bamboo`.

nicogiard@bespin:~/workspace/playOnHeroku$ git init
Initialized empty Git repository in /home/nicogiard/workspace/playOnHeroku/.git/

nicogiard@bespin:~/workspace/playOnHeroku$ git add .

nicogiard@bespin:~/workspace/playOnHeroku$ git commit -m "Initial Commit"
[master (root-commit) 502a8e7] Initial Commit
16 files changed, 364 insertions(+)
create mode 100644 Procfile
create mode 100644 app/controllers/Application.java
create mode 100644 app/views/Application/index.html
create mode 100644 app/views/errors/404.html
create mode 100644 app/views/errors/500.html
create mode 100644 app/views/main.html
create mode 100644 conf/application.conf
create mode 100644 conf/dependencies.yml
create mode 100644 conf/messages
create mode 100644 conf/routes
create mode 100644 public/images/favicon.png
create mode 100644 public/javascripts/jquery-1.6.4.min.js
create mode 100644 public/stylesheets/main.css
create mode 100644 test/Application.test.html
create mode 100644 test/ApplicationTest.java
create mode 100644 test/BasicTest.java
create mode 100644 test/data.yml

nicogiard@bespin:~/workspace/playOnHeroku$ git remote add heroku git@heroku.com:falling-night-3220.git

nicogiard@bespin:~/workspace/playOnHeroku$ git push heroku master
Counting objects: 30, done.
Compressing objects: 100% (22/22), done.
Writing objects: 100% (30/30), 38.06 KiB, done.
Total 30 (delta 1), reused 0 (delta 0)

-----> Heroku receiving push
-----> Play! app detected
-----> WARNING: Play! version not specified in dependencies.yml. Default version: 1.2.4 being used....
-----> Installing Play! 1.2.4.....
-----> done
-----> Installing ivysettings.xml..... done
-----> Building Play! application...
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.2.4, http://www.playframework.org
~
1.2.4
Building Play! application at directory ./
Resolving dependencies: .play/play dependencies ./ --forProd --forceCopy --silent -Duser.home=/tmp/build_2eici4qw4ugfc 2>&1
:: loading settings :: file = /tmp/build_2eici4qw4ugfc/.ivy2/ivysettings.xml
~ Resolving dependencies using /tmp/build_2eici4qw4ugfc/conf/dependencies.yml,
~
~
~ No dependencies to install
~
~ Done!
~
Precompiling: .play/play precompile ./ --silent 2>&1
Listening for transport dt_socket at address: 8000
14:15:13,659 INFO ~ Starting /tmp/build_2eici4qw4ugfc
14:15:14,293 INFO ~ Precompiling ...
14:15:19,587 INFO ~ Done.
-----> Discovering process types
Procfile declares types -> web
-----> Compiled slug size is 26.5MB
-----> Launching... done, v4
http://falling-night-3220.herokuapp.com deployed to Heroku

To git@heroku.com:falling-night-3220.git
* [new branch] master -> master
nicogiard@bespin:~/workspace/playOnHeroku$ heroku open
Opening http://falling-night-3220.herokuapp.com/

nicogiard@bespin:~/workspace/playOnHeroku$ date
lundi 25 juin 2012, 16:18:20 (UTC+0200)