Synchronisation de tables entre plusieurs DB

En fait les tables concernés ne sont pas à 100% identiques, mais à
90%…
du coup la solution d’utiliser deux bases suivant le modèle ne peut
pas marcher :(…

Etant donné que je n’ai pas besoin de temps reel, je m’oriente
clairement vers un partage via du xml… un peu bourrin mais simple !
En gros chaque semaine, de préférence la nuit, je vais générer du xml
à partir des éléments qui m’intéresse dans ma table mettre, et mettre
ainsi à jours les clients.

Je viens de voir la methode to_xml et hash.form_xml…
D’ailleurs j’ai qq pbs avec mon to_xml qui semble m’ajouter un tag de
trop par table.

Par exemple un Video.find(:all).to_xml, me renvois qqch comme :





Je comprend pas l’intérêt de ce tag … surtout que ca fait
foiré mon hash.form_xml :/…

C’est la racine de ton XML, requise pour assurer la validation du
document.

Comme quoi je n’ai pas été claire :)… d’un coté je m’en
doutais :/…

Donc je suis bien parti sur le xml…
vu que j’ai beaucoup de tables liés c’est un peu chaud, surtout que la
fonction hash.from_xml ne semble pas très efficace (apparement elle ne
prend même pas en compte les associations).

Etant donné que je n’ai pas besoin de temps reel, je m’oriente
clairement vers un partage via du xml… un peu bourrin mais simple !
En gros chaque semaine, de préférence la nuit, je vais générer du xml
à partir des éléments qui m’intéresse dans ma table mettre, et mettre
ainsi à jours les clients.

Voilà un détail important à préciser dès le début :slight_smile:
Effectivement le plus simple ici est un transfert de fichier. C’est
exactement ce que je fait sur une appli en prod. L’application rails
envoi des mise à jour quotidiennes à une autre application via FTP.

Mourad

Oui le to_xml est impec,
par contre le Hash.form_xml ne prend semble pas prendre en compte ces
associations… et pour trouver de la doc dessus c’est un peu la
mort !

si tu me trouve le contraire j’en serais ravi, mais j’ai peur que… :
(

Donc je suis bien parti sur le xml…
vu que j’ai beaucoup de tables liés c’est un peu chaud, surtout que la
fonction hash.from_xml ne semble pas très efficace (apparement elle ne
prend même pas en compte les associations).

Les associations sont parfaitement prise en charge lors de la
sérialisation d’un modèle ActiveRecord en xml (ou yaml)

Par exemple :

Model.to_xml(:include => [:items, :tags])

Retourne quelque chose comme


  Exemple
  
    
      ...
    
     
      ...
    
  
  
    
      ...
   
  

De plus si la forme du fichier xml générer ne conviens pas, tu peut
luis passer ton propre XmlBuilder
Voir la doc de ActiveRecord::Serialization

A+

Mourad

Voila ce qui doit être le code ultime de deserialization XML pour des
objets ActiveRecord :
http://riftor.g615.co.uk/index.php?action=view&id=20

Le seul problème c’est qu’il y a un bug à cet endroit la en utilisant
comme exemple :
@xml = Foo.find(:all).to_xml(:include=>[:foo2])
Foo.from_xml(@xml)

NoMethodError: private method gsub!' called for []:Array from /Applications/Locomotive2/Bundles/ rmagickRailsMar2007_i386.locobundle/framework/lib/ruby/1.8/rexml/ parsers/xpathparser.rb:20:in parse’
from /Applications/Locomotive2/Bundles/
rmagickRailsMar2007_i386.locobundle/framework/lib/ruby/1.8/rexml/
xpath_parser.rb:57:in parse' from /Applications/Locomotive2/Bundles/ rmagickRailsMar2007_i386.locobundle/framework/lib/ruby/1.8/rexml/ xpath.rb:53:in each’
from /Applications/Locomotive2/Bundles/
rmagickRailsMar2007_i386.locobundle/framework/lib/ruby/1.8/rexml/
element.rb:947:in inject' from ./script/../config/../config/environment.rb:152:in from_xml’
from (irb):10

Ce qui correspond à ce bloc de code

root.elements.inject([]) do |instances, element|
instances.push(self.from_xml(element))
end

Ca fait 3h que je cherche mais je comprend pas …