Oui, ces vrai, j’ai aussi regardé ces technos, mais je ne les aurais pas
indiquées sur ce forum car pour le coup, elles n’ont à ma connaissance
aucun rapport avec Rails. Et puis dans mon cas j’aurais un problème de
compétence à combler en plus.
Par contre je ne crois pas que ça gère la synchronisation.
Sympa, faudra voir ce que donne ce projet dans le futur, mais pour
l’instant
ça ne va pas faire l’affaire pour mon problème.
Nous avons développé la première version d’une application “offline”
avec Google Gears (et Rails) il y a plus d’un an et nous avons lancé
une “version 2” de cette application web il y a 2 mois.
Mes conclusions : on avait choisi Google Gears parce que c’était bien
dans l’esprit web (qui est un monde “plastique”) et on ne s’est pas
trompé. De plus, en 1 an, la technologie a continué d’évoluer dans le
bon sens.
Par contre, Rails ne fait pas grand chose dans l’histoire, puisque
dèslors que l’application est Offline, c’est du pur HTML/CSS/Javascript.
Dans ce cadre là, ce n’est plus vraiment une appli Rails, mais
plutôtune appli Javascript. Et donc, vaut mieux savoir coder (proprement) en
Javascript avec un framework qui va bien.
++
yk
PS : malheureusement, je n’ai ni screenshot, ni screencast de l’appli,
mais ça devrait venir prochainement…
En fait Joyent Slingshot correspond exactement à mon besoin, mais comme
je disais la documentation est très pauvre, le projet paraît laissé à
l’abandon, et je n’ai pas réussi à le faire marcher sous windows.
Par contre, Rails ne fait pas grand chose dans l’histoire, puisque dès
lors que l’application est Offline, c’est du pur HTML/CSS/Javascript.
Dans ce cadre là, ce n’est plus vraiment une appli Rails, mais plutôt
une appli Javascript. Et donc, vaut mieux savoir coder (proprement) en
Javascript avec un framework qui va bien.
Et j’ajoute, même si cela va de soit, avec des Test Unitaire (comme http://www.jsunit.net/ par exemple).
Finalement GoogleGear c’est du Xul non ? Il faudrait que je regarde
tiens…
C’est ce que j’avais cru comprendre en lisant la doc de Google Gears.
Visiblement il garde des les pages de l’appli en cache et on doit coder
les appels à la base de données en javascript avec leur API. Donc ça
reviendrait à coder deux fois l’appli, une fois en Rails pur pour le
mode on-line et une fois en javascript pour le mode off-line. Et l’outil
WorkerPool permet de synchroniser les données en tâche de fond. C’est
bien ça?
Pour le javascript, je me débrouille avec la librairie prototype.
J’espère que ce sera suffisant. Et j’ai ma bible à côté de moi “Bien
développer pour le Web 2.0” de Christophe P…
Ce qui est dommage, est que la solution Joyent Slingshot paraît parfaite
pour ce type de besoin: ça sert à embarquer l’appli Rails dans une appli
Windows ou Mac, en mode offline on bascule en local en sauvant les
données dans sqlite3 et en on-line on part sur le web. Un système de
synchro entre models Rails (basé sur les champs created_at et
updated_at) est embarqué dans l’appli afin de synchroniser les données.
Si quelqu’un a deux minutes et veut bien essayer le tuto de l’appli de
base avec Slingshot sur Windows, ça pourrait être sympa . Ca me
permettrait de voir si je ne suis pas un idiot de base qui n’arrive pas
à comprendre une (pseudo) doc… https://dev.joyent.com/projects/slingshot/wiki/BasicApp
En tous cas merci pour ce retour d’expérience avec Google Gears, je
crois que je vais me plonger un peu plus dedans ces prochains jours.
C’est multiplateforme et ce n’est qu’une grosse dizaine de ligne (le
code de
l’appli, pas le code pour la sync qui est un plus long). Et c’est aussi
possible de le faire avec SWT (qui a un widget Browser).
Le plus lourd serait de coder l’algorithme de synchronisation.
C’est plutôt facile à faire puisqu’en fait je l’ai déjà fait pour un
client. J’ai créé une app JRuby+Qt Jambi avec un Webkit. Pour l’app
web elle est sur un serveur (avec une db mysql) et packagé (avec une
db sqlite3) avec l’app comme avec slingshot.
C’est multiplateforme et ce n’est qu’une grosse dizaine de ligne (le
code de l’appli, pas le code pour la sync qui est un plus long). Et
c’est aussi possible de le faire avec SWT (qui a un widget Browser).
Oui ben tu vois c’est ce sur quoi je me dirigeais, c’est super d’avoir
un retour d’expérience là-dessus. Finalement Google Gears, bien que
prévu pour ce genre de cas, semble s’avérer plus lourd à mettre en place.
Le plus lourd serait de coder l'algorithme de synchronisation.
C’est pas si lourd que ça. Tu fais une API JSON ou XML qui envoie et
reçoit les données puis en fonction ajoute/modifie/supprime les
données. Un peu comme un diff en fait.
Ok donc une synchro basée sur une API REST.
Comment tu gère le système de clés primaires (par défaut) de Rails?
Exemple: un enregistrement sera stocké en local avec l’ID 5 alors que
lorsqu’il sera envoyé au serveur, il aura l’ID 8 car d’autres
utilisateurs auront stocké des enregistrement entre temps. Comment ça
gère les associations?
Et dans ton cas, est-ce que tu synchronisait toute la base ou seulement
une partie?
En tous cas merci de ton retour, et si tu as des snippets je suis
preneur
J’utilise des uuid comme clés primaires, comme ça pas de conflits.
C’est plus le système par défaut mais il n’y a pas vraiment d’autres
solutions.
Ah oui effectivement.
date de la dernière synchro.
En fait je parlais des données les plus récentes de l’ensemble des
modèles (le schéma entier, quoi). Ce qui fait qu’en local on a une copie
conforme de la base du serveur, même si on ne réécrase pas tout à chaque
fois. C’est bien ça?
ne sais pas s’il va y avoir qq1 qui le reprendra, je te conseillerais
d’aller plutôt du côté de SWT, il y a plein d’exemples Java sur le
site qui sont très facilement adaptable pour JRuby. Ensuite tu peux
packagé ton app SWT et ton app Rails avec jruby-complete et toutes les
gems nécessaires (voir le blog de nick sieger pour jruby-complete + gems).
Super conseil! Thanks a lot man!