> > Bonjour, Bonjour,
> > > Je viens de transférer un site vers un nouveau serveur. > > > Sur ce serveur certaines données, comme les comptes utilisateurs, sont > > dupliquées lors de l'enregistrement. > > > Les enregistrement sont effectuées à la même seconde à chaque fois, sur > > des modele qui ont des regles de validation d'unicité sur certains > > enregistrements. > > (validates_uniqueness_of :email , :on => :create) > Attenton validate_uniqueness n'est pas garantie absolue d'unicité car ton opération n'est pas atomique En effet le pattern: Requête 1: Test uniqueness => OK Requête 2: Test uniqueness => OK Requête 1: Insert user Requête 2: Insert user => duplication du user Est tout à fait possible, le seul moyen fiable de garantir l'unicité c'est de gérer la contrainte au niveau de la base de donnée. Ce genre de pattern d'erreur est plus probable d'arriver si ta création de user se fait en ajax sans invalidé le bouton de submit et que cette requête est particulièrement lente (FULL SCAN ?) car dans ce cas là tes utilisateurs seront plus prompt à cliquer 2 fois sur submit et comme tes requêtes sont lente le cas décrit est plus succeptible d'arriver. Un cas qui pourrait avoir tendance à empirer le nombre d'occurrence de ce pattern est l'utilisation de table innodb avec des transactions. Le commit ne se faisant qu'à la fin et si je ne m'abuse comme il n'y a pas de table locking mais du row locking, si une 2ème requete arrive en demandant la création du user tu es marron car comme ce n'est pas commit le test d'unicité passe. A vérifier, j'utilise surtout du myisam donc je dis peut-être des innepties. > > J'ai pu voir qu'il n'y avait pas la gem mysql d'installée, est ce qu'il > > est possible que le problème vienne de là ? > > il me semble que si la gem mysql n'est pas installée , tu n'as pas de > connexion à ta base donc l'application ne fonctionne pas. > > donc a priori non. Faux, jusqu'à Rails 2.1.x tu as un connecteur bundle avec Rails. Il est moins performant mais n'est pas buggé à ce point là. A partir de Rails 2.2, sans gem mysql ca plantera par contre. Renaud --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [EMAIL PROTECTED] -~----------~----~----~----~------~----~------~--~---
