Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Tree: a62c12d362
Fetching contributors…

Cannot retrieve contributors at this time

379 lines (248 sloc) 12.72 kB
<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<head>
<meta charset="utf-8">
<title>Travailler avec rails fait trouver des bugs - Shiny happy people coding</title>
<meta name="author" content="Cyril Mougel">
<meta name="description" content="Alors que j&#8217;ai commencé à travailler professionnelement parlant avec Rails
depuis mon départ de CapGemini et mon arrivée à JTEK. En une semaine &hellip;">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="canonical" href="http://blog.shingara.fr/travailler-avec-rails-fait-trouver-des-bugs.html">
<link href="/favicon.png" rel="icon">
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
<script src="/javascripts/modernizr-2.0.js"></script>
<script src="/javascripts/ender.js"></script>
<script src="/javascripts/octopress.js" type="text/javascript"></script>
<link href="/atom.xml" rel="alternate" title="Shiny happy people coding" type="application/atom+xml">
<!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-11352302-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body >
<header role="banner"><hgroup>
<h1><a href="/">Shiny happy people coding</a></h1>
<h2>Codons avec le sourire</h2>
</hgroup>
</header>
<nav role="navigation"><ul class="subscription" data-subscription="rss">
<li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
</ul>
<form action="http://google.com/search" method="get">
<fieldset role="search">
<input type="hidden" name="q" value="site:blog.shingara.fr" />
<input class="search" type="text" name="q" results="0" placeholder="Search"/>
</fieldset>
</form>
<ul class="main-navigation">
<li><a href="/">Blog</a></li>
<li><a href="/blog/archives">Archives</a></li>
</ul>
</nav>
<div id="main">
<div id="content">
<div>
<article class="hentry" role="article">
<header>
<h1 class="entry-title">Travailler avec rails fait trouver des bugs</h1>
<p class="meta">
<time datetime="2008-08-13T00:00:00+02:00" pubdate data-updated="true">Aug 13<span>th</span>, 2008</time>
| <a href="#disqus_thread">Comments</a>
</p>
</header>
<div class="entry-content"><p>Alors que j&#8217;ai commencé à travailler professionnelement parlant avec Rails
depuis mon départ de CapGemini et mon arrivée à JTEK. En une semaine et demi,
je constate 1 bug sur rails 2.1, un bug sur Edge et un comportement ajouté en
Rails 2.1 qui disparaitra en Rails 2.2 (déjà disparu sur Edge)</p>
<h1><code>#has_one</code> demande la validation de sa liaison</h1>
<p>Durant la migration de l&#8217;application développé au sein de Jtek de Rails
1.2 à 2.1, j&#8217;ai constaté que les éléments <code>#has_one</code> sont désormais
validé durant la validation du parent. En effet, ce comportement n&#8217;était pas
présent dans les versions antérieurs à Rails 2.1. Par contre, la validation du
<code>#has_many</code> est quand à elle effectuée depuis plusieurs version de
Rails.<p>
<p>Par contre après une lecture du code de Rails edge, actuellement, ce
comportement disparaitra complétement en Rails 2.2. En effet, une option
<code>:validate</code> a été ajouté au méthode <code>#has_many</code>,
<code>#has_and_belongs_to_many</code> et <code>#has_one</code>. J&#8217;ai parlé de
ce comportement dans une <a
href="http://blog.shingara.fr/2008/06/27/vivre-avec-edge-ou-quoi-de-neuf-dans-rails-edge-1-changement-dapi-et-des-tests-de-performances">news
Vivre avec Rails</a>.</p>
<p>Pour palier ce problème, j&#8217;ai créé un petit plugin rails qui permet de
couper la validation sur le <code>#has_one</code>. Vous pouvez trouver les
sources sur le <a href="http://github.com/jtek">github de JTek</a>.</p>
<h1>Bug de logger dans le Runner de Rails-2.1</h1>
<p>Sur ce point j&#8217;ai reporté un bug sur le lighthouse de Rails. En effet, j&#8217;ai
constaté que si on utilisait le logger par défaut de Rails, et qu&#8217;on réalisait
un log dans le code executé par script/runner il ne se retrouvait pas loggé
dans le fichier production.log en mode production. Par contre en mode
développement, tout se passait bien. En fait, le problème vient du nouveau
Logger par défaut de rails qui est une surcouche au Logger de Ruby. Ainsi, il
contient un buffer qui est flushé régulièrement. Mais en fait en mode
production, le flush est désactivé. On peux ainsi retrouvé différent moment de
flush dans le code de rails pour vider ce buffer. Mais voilà, avec
script/runner, on peux se retrouver à ne pas avoir flusher tout le logger à la
fin de sa tâche. Pour palier le problème, il suffit de faire un
<code>RAILS_DEFAULT_LOGGER.flush</code> à la fin du fichier script/runner.
Sinon vous pouvez essayer de faire bouger le <a
href="http://rails.lighthouseapp.com/projects/8994/tickets/803">rapport de bug</a> que j&#8217;ai
ouvert</p>
<h1>Eager Loading empêchant la migration en production</h1>
<p>Voulant testé un peu Pictrails avec Edge, pour reporté le bug précédent, je
me suis retrouvé bettement à ne pas pouvoir réaliser la migration en mode
Production de Pictrails. J&#8217;ai ainsi trouvé la cause qui est en fait le eager
loading des models durant l&#8217;initialisation. Dans mon model Pictures, il se
trouve que je fait une demande d&#8217;information sur un autre model. Du coup Rails
tente de faire une requête SQL avant de réaliser la migration. Forcement, ca
peux pas fonctionner. La seule méthode pour éviter ca est de mettre l&#8217;option
config.classe_cache à false dans le fichier de configuration. J&#8217;ai bien sûr
<a href="http://rails.lighthouseapp.com/projects/8994/tickets/802">reporté un bug à ce sujet</a>.
</div>
<footer>
<p class="meta">
<span class="byline author vcard">Posted by <span class="fn">Cyril Mougel</span></span>
<time datetime="2008-08-13T00:00:00+02:00" pubdate data-updated="true">Aug 13<span>th</span>, 2008</time>
</p>
<div class="sharing">
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.shingara.fr/travailler-avec-rails-fait-trouver-des-bugs.html" data-via="shingara" data-counturl="http://blog.shingara.fr/travailler-avec-rails-fait-trouver-des-bugs.html" >Tweet</a>
<div class="g-plusone" data-size="medium"></div>
<div class="fb-like" data-send="true" data-width="450" data-show-faces="false"></div>
</div>
<p class="meta">
<a class="basic-alignment left" href="/vivre-avec-edge-ou-quoi-de-neuf-dans-rails-edge-3.html" title="Previous Post: Vivre avec Edge (ou quoi de neuf dans Rails Edge) #3">&laquo; Vivre avec Edge (ou quoi de neuf dans Rails Edge) #3</a>
<a class="basic-alignment right" href="/gettext-avec-Rails-ca-peux-etre-long-pour-un-formulaire-en-erreur.html" title="Next Post: Gettext avec Rails, ca peux être long pour un formulaire en erreur">Gettext avec Rails, ca peux être long pour un formulaire en erreur &raquo;</a>
</p>
</footer>
</article>
</div>
<aside class="sidebar">
<section>
<h1>Recent Posts</h1>
<ul id="recent_posts">
<li class="post">
<a href="/pourquoi-jai-arrete-decent-exposure.html">pourquoi j'ai arrêté decent_exposure</a>
</li>
<li class="post">
<a href="/tester-ses-vues-rabl.html">tester ses vues rabl</a>
</li>
<li class="post">
<a href="/vundle-ou-le-bundler-de-vim.html">vundle ou le bundler de vim</a>
</li>
<li class="post">
<a href="/dante-pour-mettre-du-daemon-dans-son-code.html">dante pour mettre du daemon dans son code</a>
</li>
<li class="post">
<a href="/moped-le-nouveau-driver-mongodb-pour-ruby.html">moped le nouveau driver mongodb pour ruby</a>
</li>
<li class="post">
<a href="/quiet-assets-le-limiteur-de-log.html">Quiet Assets le gem qui limite les logs</a>
</li>
<li class="post">
<a href="/telecharger-fichier-de-basecamp.html">Récupération de ses fichiers sur basecamp</a>
</li>
<li class="post">
<a href="/translate-on-mongoid.html">Localize avec mongoid</a>
</li>
<li class="post">
<a href="/mailtrap-l-aide-au-staging.html">Mailtrap l'aide au staging</a>
</li>
<li class="post">
<a href="/une-journee-dediee-i-mongodb.html">Une journée dédiée à MongoDB</a>
</li>
</ul>
</section>
<section>
<h1>GitHub Repos</h1>
<ul id="gh_repos">
<li class="loading">Status updating...</li>
</ul>
<a href="https://github.com/shingara">@shingara</a> on GitHub
<script type="text/javascript">
$.domReady(function(){
if (!window.jXHR){
var jxhr = document.createElement('script');
jxhr.type = 'text/javascript';
jxhr.src = '/javascripts/libs/jXHR.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(jxhr, s);
}
github.showRepos({
user: 'shingara',
count: 10,
skip_forks: false,
target: '#gh_repos'
});
});
</script>
<script src="/javascripts/github.js" type="text/javascript"> </script>
</section>
<section>
<h1>Latest Tweets</h1>
<ul id="tweets">
<li class="loading">Status updating...</li>
</ul>
<script type="text/javascript">
$.domReady(function(){
getTwitterFeed("shingara", 4, false);
});
</script>
<script src="/javascripts/twitter.js" type="text/javascript"> </script>
<a href="http://twitter.com/shingara" class="twitter-follow-button" data-show-count="true">Follow @shingara</a>
</section>
</aside>
</div>
</div>
<footer role="contentinfo"><p>
Copyright &copy; 2012 - Cyril Mougel -
<span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
</p>
</footer>
<script type="text/javascript">
var disqus_shortname = 'shinydevblog';
var disqus_script = 'count.js';
(function () {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
}());
</script>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js#appId=212934732101925&xfbml=1";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<script type="text/javascript">
(function() {
var script = document.createElement('script'); script.type = 'text/javascript'; script.async = true;
script.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(script, s);
})();
</script>
<script type="text/javascript">
(function(){
var twitterWidgets = document.createElement('script');
twitterWidgets.type = 'text/javascript';
twitterWidgets.async = true;
twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
})();
</script>
</body>
</html>
Jump to Line
Something went wrong with that request. Please try again.