dimanche 14 décembre 2014

Grails, Maven and GSON : Could not find artifact


J'ai eu le problème suivant en voulant intégrer la librairie GSON à mon projet :

Error |
Resolve error obtaining dependencies: Could not find artifact com.google.code.gson:gson:zip:2.3.1 in grailsCentral (http://repo.grails.org/grails/plugins) (Use --stacktrace to see the full trace)


La solution est très simple.Il faut mettre la dépendance dans dependencies et non dans plugin :

dependencies {
        // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes e.g.
        runtime 'mysql:mysql-connector-java:5.1.24'
        compile 'com.google.code.gson:gson:2.3.1'
    }
Plus d'infos sur : http://stackoverflow.com/a/20974287/2473598

jeudi 30 octobre 2014

Comment exporter facilement ses données dans différents formats ( pdf, excel ...) avec Grails ?


Dans le site que je suis en train de réaliser, j'ai des tableaux de données et je veux pouvoir les exporter facilement dans le format désiré.Pour cela, il existe un plugin Grails : export
Avec ce plugin, vous allez pouvoir ajouter ceci dans vos page HTML :



Ce tutoriel va expliquer comment installer et configurer ce plugin ainsi que les petits problèmes que j'ai rencontré.

Installation du plugin


Pour installer le plugin, il vous faut ajouter dans BuildConfig.groovy :


repositories {
...
mavenRepo "http://repo.grails.org/grails/core"
...
}
plugins {
...

compile ":export:1.6"
...
}

Si vous ne spécifiez pas le repositories Maven ( ce n'est pas dans la documentation), vous allez avoir l'erreur ci-dessous :

Resolve error obtaining dependencies: Could not find artifact org.odftoolkit:odfdom-java:jar:0.8.5 in grailsCentral (http://repo.grails.org/grails/plugins) (Use --stacktrace to see the full trace)
Error |


Modification de la page GSP

 <head>
     ... 
     <r:require module="export"/>
     ... 
 </head>
 <body>
     <export:formats /> 
 </body>

Le tag d'export va permettre l'affichage de la barre des icons.

Remarques :
  • Vous pouvez mettre le tag export tag n'importe où dans la GSP
  • Vous  pouvez spécifier le format désiré :

<export:formats formats="['csv', 'excel', 'ods', 'pdf', 'rtf', 'xml']" /> 


Modification de votre controller

Voici mon controlleur ( avec seulement le code utile ) :


class ToolsController {

    // Export service provided by Export plugin

    def exportService

    def grailsApplication  //inject GrailsApplication

    def index() {

        if(!params.max) {

            params.max = 10

        }

        if ((params.extension != null)) {

            log.info(params.get('zest'))

            def format=params.extension

            if ("xls".equals(params.extension)) {

                format="excel"

            }

            if(format && format != "html"){

                response.contentType = grailsApplication.config.grails.mime.types[format]

                response.setHeader("Content-disposition", "attachment; filename=check.${params.extension}")

                List fields = ["machineName", "fileName", "confServerName"]

                Map labels = ["machineName": "Nom de machine", "fileName": "Nom de fichier",   "confServerName":"Valeur du ServerName"]

                Map formatters = new HashMap()

                Map parameters = new HashMap()

                exportService.export(format, response.outputStream,Check.list(params), fields, labels, formatters, parameters)

            }

        }

   }

}

Dans mon code, j'utilise une classe Domaine : Check avec 3 membres: machineName, fileName, confServerName.Ils sont spécifiés dans le code car c'est ce que je veux afficher dans le pdf.

Remarques :
  • J'ai rencontré quelques problèmes avec la valeur de params.format.Elle était toujours null et je ne sais pas pourquoi.Mon code est donc un peu différent de la documentation.
  • Il est aussi possible d'ajuster la taille des colonnes et de mettre le titre des colonnes en gras en utilisant formatters et parameters.Voir la documentation pour plus de détails : http://grails.org/plugin/export
Pour information, voici ma configuration  :
  • Grails 2.3.11
  • Plugin ; runtime ":resources:1.2.1"

mardi 16 septembre 2014

Grails : la gestion des bases de données dans différents environnements


Grails vous permet d'utiliser une base de données par environnements.Si vous changez d'environnements, Grails utilisera automatiquement la bonne base de données.
Cet article va vous montrer concrètement ce qu'il faut faire pour mettre en place trois environnements ( dev, test, production ).

Voici par exemple, les environnements que j'ai défini :

  • development: In memory database
  • test:               Mysql sur localhost
  • production :   Mysql sur une machine de production

Définir ses environnements dans DataSource.groovy

Voici le fichier qui contient les différents environnements cités ci-dessus :

hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3
//    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
}

// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
        }
        dataSource_lookup {
            pooled = true
            driverClassName = "org.h2.Driver"
            username = "sa"
            password = ""
        }
    }
    test {
        dataSource {
            pooled = true
            driverClassName = "com.mysql.jdbc.Driver"
            dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
            dbCreate = "create-drop"
            url = "jdbc:mysql://localhost/toolprod"
            username = "root"
            password = ""
        }

    }
    production {
        grails.config.locations = ["file:/opt/apache-tomcat-7.0.47/conf/ConfigToolprod.groovy"]
    }
}  


Production Environment



Comme vous pouvez le voir, la façon de définir l'environnement de production est différente.On a déplacé la configuration dans un fichier sur la machine.Il sera ainsi plus facile de changer de mot de passe et en plus, vous n'aurez pas besoin de reconstruire un war pour changer de mot de passe.

Dans l'exemple ci-dessous, il y a un exemple de datasource.Cet exemple contient beaucoup de paramétrage.Vous n'avez pas besoin de tous les définir.Par contre, il faut noter qu'avec cette configuration, Grails se reconnectera automatiquement à votre base Mysql.





ConfigToolprod.groovy


dataSource {
    pooled = true
    dbCreate = "update"
    url = "jdbc:mysql://localhost/toolprod"
    driverClassName = "com.mysql.jdbc.Driver"
    dialect = org.hibernate.dialect.MySQL5InnoDBDialect
    username = "LOGIN"
    password = "PASSWORD"
    properties {
       // Documentation for Tomcat JDBC Pool
       // http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Common_Attributes
       // https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/PoolConfiguration.html
       jmxEnabled = true
       initialSize = 5
       maxActive = 50
       minIdle = 5
       maxIdle = 25
       maxWait = 10000
       maxAge = 10 * 60000
       timeBetweenEvictionRunsMillis = 5000
       minEvictableIdleTimeMillis = 60000
       validationQuery = "SELECT 1"
       validationQueryTimeout = 3
       validationInterval = 15000
       testOnBorrow = true
       testWhileIdle = true
       testOnReturn = false
       ignoreExceptionOnPreLoad = true
       // http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#JDBC_interceptors
       jdbcInterceptors = "ConnectionState;StatementCache(max=200)"
       defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED // safe default
       // controls for leaked connections
       abandonWhenPercentageFull = 100 // settings are active only when pool is full
       removeAbandonedTimeout = 120
       removeAbandoned = true
       // use JMX console to change this setting at runtime
       logAbandoned = false // causes stacktrace recording overhead, use only for debugging
       // JDBC driver properties
       // Mysql as example
       dbProperties {
           // Mysql specific driver properties
           // http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html
           // let Tomcat JDBC Pool handle reconnecting
           autoReconnect=false
           // truncation behaviour
           jdbcCompliantTruncation=false
           // mysql 0-date conversion
           zeroDateTimeBehavior='convertToNull'
           // Tomcat JDBC Pool's StatementCache is used instead, so disable mysql driver's cache
           cachePrepStmts=false
           cacheCallableStmts=false
           // Tomcat JDBC Pool's StatementFinalizer keeps track
           dontTrackOpenResources=true
           // performance optimization: reduce number of SQLExceptions thrown in mysql driver code
           holdResultsOpenOverStatementClose=true
           // enable MySQL query cache - using server prep stmts will disable query caching
           useServerPrepStmts=false
           useServerPrepStmts=false
           // metadata caching
           cacheServerConfiguration=true
           cacheResultSetMetadata=true
           metadataCacheSize=100
           // timeouts for TCP/IP
           connectTimeout=15000
           socketTimeout=120000
           // timer tuning (disable)
           maintainTimeStats=false
           enableQueryTimeouts=false
           // misc tuning
           noDatetimeStringSync=true
       }
    }
}




dimanche 31 août 2014

Mettre à jour Grails 2.3.6

J'ai décidé de mettre à jour Grails car ma version de Grails commence à dater un peu ( Grails 2.3.6)...
Dans un premier temps,j'ai voulu tester le jdk1.8 pour voir ce que cela donner puis finalement j'ai fait un test avec Grails 2.4.3 et le jdk 1.7.
Finalement, le choix de la raison sera de passer à Grails 2.3.11 ...


Petite remarque : j'utilise le plugin Grails d'IntelliJ qui a une option "Change Grails SDK". Cela me permet de passer à une autre version de Grails très facilement et surtout de revenir en arrière facilement

Grails 2.3.6 with JDK 1.8_05

Cette mise à jour à échouer et d'après ce que j'ai lu ici et là, c'est normal.
Grails 2.3.6 ne fonctionne pas avec le jdk 1.8


J'ai eu le message d'erreur suivant au démarrage de mon site Grails : Java HotSpot(TM) Server VM warning: ignoring option PermSize=256m; support was removed in 8.0 

opt/drieu/jdk1.8.0_05/bin/java -Dgrails.home=/opt/drieu/grails-2.3.6 -Dbase.dir=/home/drieu/workspaces/toolprod -Dtools.jar=/opt/drieu/jdk1.8.0_05/lib/tools.jar -Dgroovy.starter.conf=/opt/drieu/grails-2.3.6/conf/groovy-starter.conf -Xmx768M -Xms768M -XX:MaxPermSize=256m -XX:PermSize=256m -javaagent:/opt/drieu/grails-2.3.6/lib/org.springsource.springloaded/springloaded-core/jars/springloaded-core-1.1.4.jar -noverify -Dspringloaded=profile=grails -Didea.launcher.port=7532 -Didea.launcher.bin.path=/opt/drieu/intellij/idea-IU-12.1.6/bin -Dfile.encoding=UTF-8 -classpath /opt/drieu/grails-2.3.6/lib/org.codehaus.groovy/groovy-all/jars/groovy-all-2.1.9.jar:/opt/drieu/grails-2.3.6/dist/grails-bootstrap-2.3.6.jar:/opt/drieu/intellij/idea-IU-12.1.6/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain org.codehaus.groovy.grails.cli.support.GrailsStarter --main org.codehaus.groovy.grails.cli.GrailsScriptRunner --conf /opt/drieu/grails-2.3.6/conf/groovy-starter.conf run-app
Java HotSpot(TM) Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Java HotSpot(TM) Server VM warning: ignoring option PermSize=256m; support was removed in 8.0
| Loading Grails 2.3.6
| Configuring classpath
| Configuring classpath.
| Environment set to development
| Environment set to development.
| Environment set to development..
| Environment set to development...
| Environment set to development....
| Environment set to development.....
| Packaging Grails application
| Packaging Grails application.
| Packaging Grails application..
| Packaging Grails application...
| Packaging Grails application....
| Packaging Grails application.....
| Running Grails application
Java HotSpot(TM) Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[ERROR] 2014-08-30 19:29:07,296 ScaffoldingGrailsPlugin - Error configuration scaffolding: startup failed:
script1409426946353650946897.groovy: -1: Repetitive method name/signature for method 'java.lang.Object withFormat(groovy.lang.Closure)' in class 'toolprod.ServerController'.
 @ line -1, column -1.
script1409426946353650946897.groovy: -1: Repetitive method name/signature for method 'java.lang.Object withFormat(groovy.lang.Closure)' in class 'toolprod.ServerController'.
 @ line -1, column -1.
2 errors
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
script1409426946353650946897.groovy: -1: Repetitive method name/signature for method 'java.lang.Object withFormat(groovy.lang.Closure)' in class 'toolprod.ServerController'.
 @ line -1, column -1.
script1409426946353650946897.groovy: -1: Repetitive method name/signature for method 'java.lang.Object withFormat(groovy.lang.Closure)' in class 'toolprod.ServerController'.
 @ line -1, column -1.
2 errors
    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:309)
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1065)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:572)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:550)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:527)
    at ScaffoldingGrailsPlugin.createScaffoldedInstance(ScaffoldingGrailsPlugin.groovy:183)
    at ScaffoldingGrailsPlugin.configureScaffoldingController(ScaffoldingGrailsPlugin.groovy:138)
    at ScaffoldingGrailsPlugin.configureScaffolding(ScaffoldingGrailsPlugin.groovy:113)
    at ScaffoldingGrailsPlugin$_closure2.doCall(ScaffoldingGrailsPlugin.groovy:88)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[INFO ] 2014-08-30 19:29:07,523 conf.BootStrap - ENVIRONNEMENT : DEVELOPMENT
[INFO ] 2014-08-30 19:29:07,523 conf.BootStrap - Nothing to load at startup ...
| Server running. Browse to http://localhost:8080/toolprod


Grails 2.3.6 à 2.4.3


J'ai aussi tester ce cas de figure.Avec un jdk1.7, j'ai tenté de faire une mise à jour vers Grails 2.4.3 mais sans succès.
J'ai eu une erreur de compilation :


Grails 2.4.3 with jdk7

me/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:42: error: no interface expected here
public class ScaffoldingViewResolver extends GrailsViewResolver {
                                             ^
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldedGroovyPageView.java:87: error: method createResponseWriter in class GroovyPageView cannot be applied to given types;
            out = createResponseWriter(response);
                  ^
  required: GrailsWebRequest,HttpServletResponse
  found: HttpServletResponse
  reason: actual and formal argument lists differ in length
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldedGroovyPageView.java:75: error: method does not override or implement a method from a supertype
    @Override
    ^
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:88: error: cannot find symbol
        return super.createFallbackView(viewName);
               ^
  symbol:   variable super
  location: class ScaffoldingViewResolver
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:58: error: method does not override or implement a method from a supertype
    @Override
    ^
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:97: error: cannot find symbol
        view.setApplicationContext(getApplicationContext());
                                   ^
  symbol:   method getApplicationContext()
  location: class ScaffoldingViewResolver
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:98: error: cannot find symbol
        view.setServletContext(getServletContext());
                               ^
  symbol:   method getServletContext()
  location: class ScaffoldingViewResolver
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:99: error: cannot find symbol
        view.setTemplateEngine(templateEngine);
                               ^
  symbol:   variable templateEngine
  location: class ScaffoldingViewResolver
8 errors


1 error

Process finished with exit code 1


Le meilleur choix

Ce n'est pas vraiment une surprise mais Il semble que le meilleur choix soit pour le moment de passer à Grails 2.3.11 ;-)
J'ai mis à jour sans problème et sans régression cette version de Grails.



lundi 25 août 2014

Les Web Components


Cet article est une synthèse sur ce que j'ai lu et entendu sur les Web Components.
Pour faire cet article, je me suis basé principalement sur la vidéo de Julien Vey sur le site d'InfoQ et sur le site html5rocks.

Web Components est un standard du W3C qui est encore à l'état de DRAFT. Donc, ce n'est pas encore pour tout de suite.Cependant, il est déjà possible de les utiliser car les principaux
acteurs du Web ( Mozilla, Google ... ) ont commencé à implémenter cette spécification.

Qu'est ce que c'est ?


Voici la définition que j'ai trouvé sur l'article de Julien Vey d'InfoQ et qui résume bien ce qu'est un Web Component :
Les Web Components permettent aux développeurs de créer des balises HTML personnalisées et réutilisables. À titre d'exemple, voici le squelette d'un composant web pour un tag <my-own-tag> : 
<element name="my-own-tag">
 <template>
   Les éléments HTML ici
 </template>
 <script>
   // la logique implémentée en JavaScript
 </script>
</element

Remarque : Une fois que ce sera standard, il sera possible de ré-utiliser ces balises sur tous les navigateurs !

Pourquoi s'intéresser au Web Component maintenant ?


- C'est un standard du W3C.
- Il est poussé par les principaux acteurs du Web.
- Ce standard va changer le développement web d'aujourd'hui ( il sera possible de faire des composants qui seront compatibles pour tous les navigateurs )

Les navigateurs actuels et les Web Components


Un bon résumé sur l'état d'avancement de la spécification se trouve ici : are we component yet ?
Actuellement, beaucoup de navigateurs ne supportent pas les Web Components.Cependant, il existe une manière pour contourner ce problème : les polyfills.
Les polyfills sont des composants qui émulent les Web Components.Cela permet de commencer à les utiliser
.

Voici une liste des projets :
  • x-tags : x-tags est une librairie JavaScript fait par Mozilla qui implémente les Web Component pour tous les navigateurs.
  • Polylemer fait par Google et présenté lors de la Google I/O
  • Librairie UI pour Dart : web-ui
  • toolkitchen

Quelques notions 


Les templates


Voici un exemple de template avec les Web Components :

 <template id="">
 </template>

Un template, c'est un morceau de code réutilisable.La balise template des Web Components ne s'execute pas, ne charge pas d'image en mémoire.

Shadow DOM


Shadow DOM permet de faire de l'encapsulation sans passer par des iframes. C'est une notion qui existe depuis longtemps qui permet de masquer ce qu'il y a derrière une balise.

Exemple :

Dans le source, on met la balise suivante :

<div id="mondiv"></div>


A l'affichage, on aura :

<div id="mondiv">
<h2>mon contenu</h2>
</div>

Pour instancier ce shadow DOM, plusieurs méthodes sont disponibles :


  • Utilisation de javaScript

Par exemple :

var shadow = ....
shadow.innerHtml="<h2>mon contenu</h2>"


  • Insertion point

On définit un div avec notre contenu :

<div id="host">
</div>

On affiche le contenu avec la balise content :

<content></content>


Custom element

Un Custom element regroupe toutes les notions vues précédemment :

<element name="moncomposant" extends="button" constructor="moncomposant>
     <template>
    </template>
    <scritp>....</script>
</element>

Dans ma page :

<link rel="component" href="moncomposant">
<moncomposant></moncomposant>

Autres notions


Dans ce petit article, je n'ai pas abordé les points suivants les mutation observer et le model driven view qui vous permette de faire du databinding et d'évaluer les performances ...

Plus d'infos


http://www.html5rocks.com
http://www.infoq.com/fr/presentations/web-components
http://www.infoq.com/fr/news/2013/06/webcomponents

dimanche 17 août 2014

Télécharger des MP3 à partir de Youtube


En lisant un des billets de Korben, je suis tombé sur un moyen très simple pour télécharger des mp3 à partir de YouTube.Plus besoin de plugins, d'outils de conversions ou autres ! Il vous suffit d'aller sur l'adresse http://peggo.co/ et de copier l'url Youtube.

Merci Korben

Source : http://korben.info/telecharger-mp3-partir-youtube.html

vendredi 30 mai 2014

Déployer son site web Grails sur le cloud OpenShift




J'ai utilisé le cloud d'OpenShift pour déployer un site web faits en Grails. Cet article va présenter un résumé des étapes nécessaires ainsi que quelques conseils et retours d'expériences.


  Quel est la meilleur méthode pour déployer son site Grails sur OpenShift ?


La meilleur méthode que j'ai trouvé pour déployer son site Grails est de construire un war puis de le copier sur le cloud.

Par défaut, Grails a une option pour générer un war : grails war

Pour plus de détails : http://grails.org/doc/2.2.1/ref/Command%20Line/war.html


Remarque :

  • Vous pouvez utiliser le plugin Tomcat de Grails Tomcat plugin pour faire de Tomcat le servlet container utilisé par défaut lors du développement.
  • Vous pouvez effacer les fichiers non nécessaire dans votre war en ajoutant des configurations dans le fichier Config.groovy :
    1:  grails.war.resources = {  
    2:     stagingDir -> delete(dir: "$stagingDir/selenium")   
    3:  }   
    


Installation et configuration du client ssh


Il vous faut tout d'abord créer un compte sur OpenShift. Ensuite, vous pourrez configurer votre accès ssh. Il suffit simplement d'installer le package rubygems et git. Par exemple sur Gentoo, il suffit de faire ;

 emerge dev-ruby/rubygems  
 emerge git   


Si vous n'avez pas Gentoo, vous pouvez aller voir sur le site d'OpenShift  : https://www.openshift.com/get-started#cli


 gem install rhc  
 su - user  
 rhc-setup   

Voici un exemple de output de la commande rhc-setup :
#rhc setup
OpenShift Client Tools (RHC) Setup Wizard

This wizard will help you upload your SSH keys, set your application namespace, and check that other programs like Git are properly installed.

Using XXXX to login to openshift.redhat.com
Password: ******

OpenShift can create and store a token on disk which allows to you to access the server without using your password. The key is stored in your home directory and should be kept secret.  You can delete the key at any time by running 'rhc
logout'.
Generate a token now? (yes|no) yes
Generating an authorization token for this client ... lasts about 1 month

Saving configuration to /home/USER/.openshift/express.conf ... done
Checking for git ... found git version 1.8.5.5
Checking common problems .. done
Checking for a domain ... MYDOMAIN
Checking for applications ... found 1
  opendoowap http://opendoowap-totalprog.rhcloud.com/

  You are using 1 of 3 total gears
  The following gear sizes are available to you: small

Your client tools are now configured.



Déployer votre application sur le cloud

Une fois l'accès ssh configuré et que vous avez builder le war, il vous suffit de le copier sur le cloud. OpenShift utilise Git pour déployer automatiquement les applications.Si vous voulez que cela fonctionne avec un war, il y a une petite astuce : http://totalprog.blogspot.fr/2013/12/probleme-avec-le-deploiement-de-rootwar.html

Accès à votre application

 

Comment se connecter avec ssh ?

  • Logguer vous sur le site d'OpenShift.
  • Clic sur l'onglet Application.
  • Clic sur votre application.










  • A droite de l'écran, clic sur le lien : "Want to log in your application 
  • Copie la ligne sur votre console.

Par exemple :

#ssh 529e2274e0b???b@myapp.rhcloud.com


Commandes utiles :

help
tail_all
ctl_app stop
ctl_app start

Voici quelques liens utiles pour plus de détails :

  • https://www.openshift.com/developers/remote-access#keys
  • https://www.openshift.com/get-started#cli


Visitez votre site web

Le lien pour accéder à votre site web est dans la partie Application details sur le site d'OpenShift.

Temps de réponse très long

J'ai rencontré un problème lors de l' accès au  site. Le temps de chargement était vraiment très long. J'ai trouvé la solution à ce problème sur StackOverFlow :

 openshift : my local gears often timeout and go down which cause response time very long

If you do not access your application for 24 hours, it will get idled (if this is a free acount), and depending on how large your application is, it could take awhile to spin back up when you do access it again.

En fait, pour les comptes "gratuits", ils sont automatiquement  mis à "idled" si il n'y a pas d'accès pendant 24 heures.


Conclusion

Déployer un site fait avec Grails n'est pas très difficile.Si vous souhaitez voir un projet example, j'ai mis un projet sur GitHub https://github.com/drieu/fjLearning et j'ai mis en ligne le site à cette adresse :  opendoowap-totalprog.rhcloud.com