<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>blog.name.nil? : </title>
    <link>http://fabien.jakimowicz.com/articles.rss</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>rafra&#238;chir les miniatures g&#233;n&#233;r&#233;es par attachment_fu</title>
      <description>&lt;p&gt;&amp;nbsp;Vous g&amp;eacute;rez l&amp;#8217;upload d&amp;#8217;images sur votre projet rails avec attachment_fu. Vous avez une belle miniature g&amp;eacute;n&amp;eacute;r&amp;eacute;e toute seul lors de l&amp;#8217;upload. Mais vous venez d&amp;#8217;apprendre que vous allez devoir g&amp;eacute;n&amp;eacute;rer une autre miniature d&amp;#8217;une taille diff&amp;eacute;rente et le projet en production &amp;agrave; d&amp;eacute;j&amp;agrave; quelques centaines d&amp;#8217;images upload&amp;eacute;es derri&amp;egrave;re lui.&lt;/p&gt;

&lt;p&gt;Pour reg&amp;eacute;n&amp;eacute;rer la totalit&amp;eacute; des miniatures pr&amp;eacute;sentes sur le serveur, il faut juste lancer une petite commande dans la console rails : attachment_fu utilise une fonction d&amp;eacute;clench&amp;eacute;e apr&amp;egrave;s sauvegarde en base de donn&amp;eacute;es de l&amp;#8217;image principale pour g&amp;eacute;n&amp;eacute;rer les miniatures :&amp;nbsp;after_process_attachment.&lt;/p&gt;

&lt;p&gt;Probl&amp;egrave;me, cette fonction est priv&amp;eacute;e. On va donc forcer le d&amp;eacute;clenchement de l&amp;#8217;appel en re-sauvegardant toutes les images :&lt;/p&gt;

&lt;pre&gt;
Picture.all.each &amp;:save
&lt;br type="_moz" /&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;br type="_moz" /&gt;&lt;/pre&gt;</description>
      <pubDate>Sat, 19 Jul 2008 01:14:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:bab0d867-e066-403f-b758-ed6d0944e21c</guid>
      <comments>http://fabien.jakimowicz.com/articles/2008/07/19/rafraichir-les-miniatures-generees-par-attachment_fu#comments</comments>
      <category>rails</category>
      <category>rails</category>
      <category>attachment_fu</category>
      <category>thumbnail</category>
      <category>miniature</category>
      <trackback:ping>http://fabien.jakimowicz.com/trackbacks?article_id=rafraichir-les-miniatures-generees-par-attachment_fu&amp;day=19&amp;month=07&amp;year=2008</trackback:ping>
      <link>http://fabien.jakimowicz.com/articles/2008/07/19/rafraichir-les-miniatures-generees-par-attachment_fu</link>
    </item>
    <item>
      <title>D&#233;velopper sur le serveur de production, quelle bonne id&#233;e !</title>
      <description>&lt;p&gt;&amp;nbsp;Posons le d&amp;eacute;cor :&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;base de donn&amp;eacute;es aussi imposante qu&amp;#8217;inexportable sur un poste de d&amp;eacute;veloppement&lt;/li&gt;
    &lt;li&gt;temps d&amp;#8217;import trop long pour &amp;ecirc;tre op&amp;eacute;rationnel avant la fin du contrat&lt;/li&gt;
    &lt;li&gt;performances devant &amp;ecirc;tre maintenues &amp;agrave; toute heure sur le serveur de production, rendant la cr&amp;eacute;ation d&amp;#8217;une base de test caduc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comment faire pour tester des modifications devant passer en production ASAP &amp;#8230;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;PostgreSQL est l&amp;agrave; pour nous sauver/aider !&lt;/p&gt;

&lt;p&gt;Tout d&amp;#8217;abord, utiliser des transactions pour s&amp;#8217;isoler des donn&amp;eacute;es accessible par les autres services. Il s&amp;#8217;agit d&amp;#8217;un segment dans lequel toutes les modification sont cloisonn&amp;eacute;es, identique aux branches utilis&amp;eacute;es dans les arbres de d&amp;eacute;veloppement d&amp;#8217;un projet : les modifications faites dans une transaction ne seront r&amp;eacute;percut&amp;eacute;es sur l&amp;#8217;ensemble de la base qu&amp;#8217;au moment du commit la fermant. Le d&amp;eacute;but d&amp;#8217;une transaction est marqu&amp;eacute; par la commande BEGIN et 2 choix sont possibles &amp;agrave; la fin d&amp;#8217;une transaction : COMMIT ou ROLLBACK.&lt;/p&gt;

&lt;p&gt;Mais, les transactions ont un petit inconv&amp;eacute;nient quand on travaille directement avec et non dans un script : elles n&amp;#8217;acceptent plus de nouvelle commande si jamais une erreur s&amp;#8217;est produite, il faut alors rollback au d&amp;eacute;but de la transaction. Plut&amp;ocirc;t g&amp;ecirc;nant quand une op&amp;eacute;ration est chronophage.&lt;/p&gt;

&lt;p&gt;C&amp;#8217;est l&amp;agrave; qu&amp;#8217;entre en jeux les points de sauvegarde : exactement comme la plupart des jeux vid&amp;eacute;os, il permet de revenir en arri&amp;egrave;re.&lt;/p&gt;

&lt;p&gt;Mais pourquoi PostgreSQL alors que MySQL supporte les transactions et points de sauvegarde ? Tout simplement parce que les transactions de PostgreSQL supportent les modifications de structure des tables.&lt;/p&gt;

&lt;pre&gt;
BEGIN;

DELETE FROM users WHERE is_bot;
SAVEPOINT bot_deleted;

CREATE INDEX idx_users_email ON users(email);
SAVEPOINT index_created;

ALTER TABLE users OOPS_I_MADE_A_MISTAKE;

ROLLBACK TO index_created;

SELECT * FROM users;

COMMIT;&lt;/pre&gt;</description>
      <pubDate>Thu, 17 Jul 2008 14:28:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:e9ce2c2c-e894-4d88-b25c-594ca2af0d93</guid>
      <comments>http://fabien.jakimowicz.com/articles/2008/07/17/developper-sur-le-serveur-de-production-quelle-bonne-idee#comments</comments>
      <category>postgresql</category>
      <category>sql</category>
      <trackback:ping>http://fabien.jakimowicz.com/trackbacks?article_id=developper-sur-le-serveur-de-production-quelle-bonne-idee&amp;day=17&amp;month=07&amp;year=2008</trackback:ping>
      <link>http://fabien.jakimowicz.com/articles/2008/07/17/developper-sur-le-serveur-de-production-quelle-bonne-idee</link>
    </item>
    <item>
      <title>premier plugin</title>
      <description>&lt;p&gt;&amp;nbsp;Et voila, enfin &amp;#8230; Ma premi&amp;egrave;re vrai contribution au monde du libre et plus particuli&amp;egrave;rement &amp;agrave; celui de ruby on rails :&amp;nbsp;http://agilewebdevelopment.com/plugins/named_fixtures_exporter&lt;/p&gt;</description>
      <pubDate>Fri, 27 Jun 2008 13:21:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:bf96904f-b429-48d0-8da3-57ff565b7b9b</guid>
      <comments>http://fabien.jakimowicz.com/articles/2008/06/27/premier-plugin#comments</comments>
      <category>mylife</category>
      <category>rails</category>
      <category>plugin</category>
      <trackback:ping>http://fabien.jakimowicz.com/trackbacks?article_id=premier-plugin&amp;day=27&amp;month=06&amp;year=2008</trackback:ping>
      <link>http://fabien.jakimowicz.com/articles/2008/06/27/premier-plugin</link>
    </item>
    <item>
      <title>Rails plugin: named fixtures exporter</title>
      <description>&lt;p&gt;&amp;nbsp;Pour ceux qui comme moi utilisent des fixtures nomm&amp;eacute;es dans rails 2.x, vous avez sans doute &amp;eacute;t&amp;eacute; confront&amp;eacute;s au probl&amp;egrave;me de maintenance de ces pas si petits fichiers yaml.&lt;/p&gt;

&lt;p&gt;Le probl&amp;egrave;me quand on travaille sur un projet faisant des calculs sur plusieurs mod&amp;egrave;les et donc tables, c&amp;#8217;est qu&amp;#8217;on doit tester un maximum de cas afin d&amp;#8217;&amp;ecirc;tre s&amp;ucirc;r de ne rien broyer en cas de mauvaise optimisation. Il faut donc des jeux de donn&amp;eacute;es assez cons&amp;eacute;quents et les fixtures peuvent jouer ce r&amp;ocirc;le. La blague, c&amp;#8217;est qu&amp;#8217;en simplifiant les liaisons entre les fixtures en utilisant des noms et non plus les id, on se retrouve avec un syst&amp;egrave;me encore plus complexe &amp;agrave; g&amp;eacute;rer quand le volume de donn&amp;eacute;es grandit.&lt;/p&gt;

&lt;p&gt;Pour r&amp;eacute;pondre &amp;agrave; ce probl&amp;egrave;me, voici un petit plugin pour rails 2.x permettant d&amp;#8217;exporter le contenu de la base de donn&amp;eacute;es dans des fichiers de fixtures. La diff&amp;eacute;rence avec ceux existant d&amp;eacute;j&amp;agrave; tient dans un fait simple : les relations belongs_to et has_and_belongs_to_many sont g&amp;eacute;r&amp;eacute;es avec le nom des fixtures.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;Un exemple sera plus parlant :&lt;/p&gt;

&lt;pre&gt;
class Message &lt; ActiveRecord::Base
  belongs_to :sender
  belongs_to :recipient&lt;/pre&gt;

&lt;pre&gt;
&#160;&#160;has_and_belongs_to_many :medias
end
&lt;br type="_moz" /&gt;&lt;/pre&gt;

&lt;pre&gt;
$&gt; rake db:fixtures:display_named
---
sent_message_751373555:&#160;
&#160;&#160;body: qu'en penses-tu ?
&#160;&#160;sender: fabien
&#160;&#160;type: SentMessage
&#160;&#160;sent_at: 2008-06-12 15:28:43 Z
&#160;&#160;subject: de bien belles fraises
draft_message_893975074:&#160;
&#160;&#160;recipient: etienne
&#160;&#160;sender: fabien
&#160;&#160;type: DraftMessage
&#160;&#160;subject: "RE : invitation jacuzzi"
sent_message_751373556:&#160;
&#160;&#160;body: le meilleur jus d'oranges du monde!
&#160;&#160;recipient: etienne
&#160;&#160;sender: fabien
&#160;&#160;type: SentMessage
&#160;&#160;sent_at: 2008-06-19 15:25:43 Z
&#160;&#160;subject: tropicana 2
&#160;&#160;read_at: 2008-06-26 14:40:53.707300 Z
&#160;&#160;medias: strawberry_sunset
received_message_507475146:&#160;
&#160;&#160;body: everything's ok
&#160;&#160;recipient: fabien
&#160;&#160;sender: etienne
&#160;&#160;type: ReceivedMessage
&#160;&#160;sent_at: 2008-06-19 15:29:00 Z
&#160;&#160;subject: test
&#160;&#160;read_at: 2008-06-26 13:54:50.333372 Z
&lt;br type="_moz" /&gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Le plugin va regarder pour chaque mod&amp;egrave;le sp&amp;eacute;cifi&amp;eacute; les relations &amp;agrave; prendre en compte, parcourir chaque entr&amp;eacute;e dans la base de donn&amp;eacute;es et pour chaque relation le plugin va chercher dans les fichiers de fixtures le nom de la fixture associ&amp;eacute;e &amp;agrave; l&amp;#8217;entr&amp;eacute;e lue. Si aucun nom de fixture n&amp;#8217;existe, il est cr&amp;eacute;e en se basant sur la colonne title, name ou le nom de la classe suivie de l&amp;#8217;id. L&amp;#8217;&amp;eacute;criture du fichier se faisant apr&amp;egrave;s le traitement, il est possible de rafra&amp;icirc;chir les fixtures d&amp;#8217;un mod&amp;egrave;le sans perdre les noms d&amp;eacute;j&amp;agrave; pr&amp;eacute;sents.&lt;/p&gt;

&lt;p&gt;2 rake tasks sont disponible : export_named et display_named. En installant le gem progressbar, vous aurez une barre de progression vous indiquant l&amp;#8217;avancement si vos fixtures sont cons&amp;eacute;quentes.&lt;/p&gt;

&lt;p&gt;Il y a encore des lacunes (doublons non g&amp;eacute;r&amp;eacute;s) et il manque quelques tests, mais la base du plugin est pr&amp;eacute;sente et fonctionnelle.&lt;/p&gt;

&lt;p&gt;Pour l&amp;#8217;installation du plugin :&lt;/p&gt;

&lt;pre&gt;
$&gt; ./script/plugin install http://named-fixtures-exporter.googlecode.com/svn/trunk/named_fixtures_exporter&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <pubDate>Thu, 26 Jun 2008 18:48:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:f15c8653-ef1c-48b7-9cfb-26d57c8a58d9</guid>
      <comments>http://fabien.jakimowicz.com/articles/2008/06/26/named_fixtures_exporter#comments</comments>
      <category>rails</category>
      <category>rails</category>
      <category>ruby</category>
      <category>fixture</category>
      <category>plugin</category>
      <category>named_fixtures_exporter</category>
      <category>rake</category>
      <trackback:ping>http://fabien.jakimowicz.com/trackbacks?article_id=named_fixtures_exporter&amp;day=26&amp;month=06&amp;year=2008</trackback:ping>
      <link>http://fabien.jakimowicz.com/articles/2008/06/26/named_fixtures_exporter</link>
    </item>
    <item>
      <title>Rails plugin: named fixtures exporter</title>
      <description>&lt;p&gt;Pour ceux qui comme moi utilisent des fixtures nomm&amp;eacute;es dans rails 2.x, vous avez sans doute &amp;eacute;t&amp;eacute; confront&amp;eacute;s au probl&amp;egrave;me de maintenance de ces pas si petits fichiers yaml.&lt;/p&gt;

&lt;p&gt;Le probl&amp;egrave;me quand on travaille sur un projet faisant des calculs sur plusieurs mod&amp;egrave;les et donc tables, c&amp;#8217;est qu&amp;#8217;on doit tester un maximum de cas afin d&amp;#8217;&amp;ecirc;tre s&amp;ucirc;r de ne rien broyer en cas de mauvaise optimisation. Il faut donc des jeux de donn&amp;eacute;es assez cons&amp;eacute;quents et les fixtures peuvent jouer ce r&amp;ocirc;le. La blague, c&amp;#8217;est qu&amp;#8217;en simplifiant les liaisons entre les fixtures en utilisant des noms et non plus les id, on se retrouve avec un syst&amp;egrave;me encore plus complexe &amp;agrave; g&amp;eacute;rer quand le volume de donn&amp;eacute;es grandit.&lt;/p&gt;

&lt;p&gt;Pour r&amp;eacute;pondre &amp;agrave; ce probl&amp;egrave;me, voici un petit plugin pour rails 2.x permettant d&amp;#8217;exporter le contenu de la base de donn&amp;eacute;es dans des fichiers de fixtures. La diff&amp;eacute;rence avec ceux existant d&amp;eacute;j&amp;agrave; tient dans un fait simple : les relations belongs_to et has_and_belongs_to_many sont g&amp;eacute;r&amp;eacute;es avec le nom des fixtures.&lt;/p&gt;</description>
      <pubDate>Thu, 26 Jun 2008 18:39:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:8364886a-d531-430f-94ed-75f0b49d24f6</guid>
      <comments>http://fabien.jakimowicz.com/articles/2008/06/26/named%20fixtures%20exporter#comments</comments>
      <trackback:ping>http://fabien.jakimowicz.com/trackbacks?article_id=named+fixtures+exporter&amp;day=26&amp;month=06&amp;year=2008</trackback:ping>
      <link>http://fabien.jakimowicz.com/articles/2008/06/26/named%20fixtures%20exporter</link>
    </item>
    <item>
      <title>Rails plugin: named fixtures exporter</title>
      <description>&lt;p&gt;Pour ceux qui comme moi utilisent des fixtures nomm&amp;eacute;es dans rails 2.x, vous avez sans doute &amp;eacute;t&amp;eacute; confront&amp;eacute;s au probl&amp;egrave;me de maintenance de ces pas si petits fichiers yaml.&lt;/p&gt;

&lt;p&gt;Le probl&amp;egrave;me quand on travaille sur un projet faisant des calculs sur plusieurs mod&amp;egrave;les et donc tables, c&amp;#8217;est qu&amp;#8217;on doit tester un maximum de cas afin d&amp;#8217;&amp;ecirc;tre s&amp;ucirc;r de ne rien broyer en cas de mauvaise optimisation. Il faut donc des jeux de donn&amp;eacute;es assez cons&amp;eacute;quents et les fixtures peuvent jouer ce r&amp;ocirc;le. La blague, c&amp;#8217;est qu&amp;#8217;en simplifiant les liaisons entre les fixtures en utilisant des noms et non plus les id, on se retrouve avec un syst&amp;egrave;me encore plus complexe &amp;agrave; g&amp;eacute;rer quand le volume de donn&amp;eacute;es grandit.&lt;/p&gt;

&lt;p&gt;Pour r&amp;eacute;pondre &amp;agrave; ce probl&amp;egrave;me, voici un petit plugin pour rails 2.x permettant d&amp;#8217;exporter le contenu de la base de donn&amp;eacute;es dans des fichiers de fixtures. La diff&amp;eacute;rence avec ceux existant d&amp;eacute;j&amp;agrave; tient dans un fait simple : les relations belongs_to et has_and_belongs_to_many sont g&amp;eacute;r&amp;eacute;es avec le nom des fixtures.&lt;/p&gt;</description>
      <pubDate>Thu, 26 Jun 2008 18:39:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:38b04c37-840c-495f-a68b-4494e098cfbc</guid>
      <comments>http://fabien.jakimowicz.com/articles/2008/06/26/named%20fixtures%20exporter#comments</comments>
      <trackback:ping>http://fabien.jakimowicz.com/trackbacks?article_id=named+fixtures+exporter&amp;day=26&amp;month=06&amp;year=2008</trackback:ping>
      <link>http://fabien.jakimowicz.com/articles/2008/06/26/named%20fixtures%20exporter</link>
    </item>
    <item>
      <title>PostgreSQL &amp; Rails</title>
      <description>&lt;p&gt;Apr&amp;egrave;s migration sur PostgreSQL et discussions avec koollman connaissant bien cette base de donn&amp;eacute;es, j&amp;#8217;ai pu faire quelques optimisations. L&amp;#8217;authentification install&amp;eacute;e par d&amp;eacute;faut avec macports se fait par la m&amp;eacute;thode &amp;#8216;trust&amp;#8217;, ce qui permet &amp;agrave; tous les utilisateurs locaux passant par une socket de se faire passer pour un autre utilisateur.&lt;/p&gt;

&lt;p&gt;En passant sur une authentification &amp;#8216;ident sameuser&amp;#8217;, on se prot&amp;egrave;ge donc de cette faille et cela permet toujours d&amp;#8217;acc&amp;eacute;der &amp;agrave; la base de donn&amp;eacute;es sans mot de passe. Modifiez ceci dans le fichier&amp;nbsp;pg_hba.conf dont le path est&amp;nbsp;/opt/local/var/db/postgresql83/defaultdb/pg_hba.conf :&lt;/p&gt;

&lt;pre&gt;
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
local   all         all                               ident sameuser&lt;span class="Apple-style-span" style="font-family: -webkit-monospace; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;On pr&amp;eacute;cise au serveur qu&amp;#8217;il faut reload le fichier :&lt;/p&gt;

&lt;pre&gt;
$&gt; sudo su postgres
$&gt; pg_ctl reload -D /opt/local/var/db/postgresql83/defaultdb&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;La cr&amp;eacute;ation de l&amp;#8217;utilisateur en super-utilisateur peut se faire en utilisateur normal ayant le droit de cr&amp;eacute;er des base de donn&amp;eacute;es. Le script createuser posera les questions sans que vous ayez &amp;agrave; sp&amp;eacute;cifier de flag avec la commande.&lt;/p&gt;

&lt;p&gt;Enfin, une entr&amp;eacute;e database.yml peut maintenant &amp;ecirc;tre simplifi&amp;eacute;e : l&amp;#8217;utilisateur / mot de passe ainsi que l&amp;#8217;hostname ne sont plus n&amp;eacute;cessaire.&lt;/p&gt;

&lt;pre&gt;
development:
  adapter: postgresql
  encoding: utf8
  database: my_great_project_development&lt;/pre&gt;</description>
      <pubDate>Sat, 10 May 2008 12:13:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:be4910a4-1c6d-43bf-9363-0fc8843f376c</guid>
      <comments>http://fabien.jakimowicz.com/articles/2008/05/10/postgresql-rails#comments</comments>
      <category>rails</category>
      <category>rails</category>
      <category>postgres</category>
      <category>postgresql</category>
      <category>macports</category>
      <trackback:ping>http://fabien.jakimowicz.com/trackbacks?article_id=postgresql-rails&amp;day=10&amp;month=05&amp;year=2008</trackback:ping>
      <link>http://fabien.jakimowicz.com/articles/2008/05/10/postgresql-rails</link>
    </item>
    <item>
      <title>RAILS sur PostgreSQL pour l&#195;&#169;opard</title>
      <description>&lt;p&gt;&amp;nbsp;Vous avez d&amp;eacute;j&amp;agrave; franchi le pas du syst&amp;egrave;me d&amp;#8217;exploitation en passant sur un vrai syst&amp;egrave;me pleinement utilisable en tant que d&amp;eacute;veloppeur mais aussi utilisateur final voulant du fonctionnel sans taper 15k commandes, c&amp;#8217;est bien.&lt;/p&gt;

&lt;p&gt;Vous avez aussi fait l&amp;#8217;&amp;eacute;tape d&amp;#8217;arr&amp;ecirc;ter d&amp;#8217;essayer de refaire le monde avec votre framework web et utilisez un vrai framework objet comme il se doit, c&amp;#8217;est bien.&lt;/p&gt;

&lt;p&gt;Il ne reste plus qu&amp;#8217;&amp;agrave; faire de m&amp;ecirc;me avec votre base de donn&amp;eacute;es. Seul soucis, mysql (voir sqlite) est agr&amp;eacute;able par sa simplicit&amp;eacute; et son zeroconf ou presque. Mais installer postgreSQL n&amp;#8217;est pas si difficile que cela &amp;#8230; en quelques &amp;eacute;tapes. De plus, RoR offrant maintenant des rake tasks pour cr&amp;eacute;er et supprimer les base de donn&amp;eacute;es, vous n&amp;#8217;aurez pas ou presque pas de commande sp&amp;eacute;cifique &amp;agrave; m&amp;eacute;moriser.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2&gt;Premi&amp;egrave;re &amp;eacute;tape : mettez &amp;agrave; jour votre ports et les logiciels pr&amp;eacute;sents.&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;blockquote&gt; &lt;/blockquote&gt;
&lt;pre&gt;
$&gt; sudo port selfupdate
$&gt; sudo port upgrade outdated&lt;br type="_moz" /&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Seconde &amp;eacute;tape : installation de postgreSQL serveur et client.&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;On va se simplifier un poil la t&amp;acirc;che en installant le serveur seul, les d&amp;eacute;pendances installant le client.&lt;/p&gt;

&lt;pre&gt;
$&gt; sudo port install postgresql83-server

---&gt;  Fetching postgresql83
---&gt;  Attempting to fetch postgresql-8.3.1.tar.bz2 from http://ftp8.us.postgresql.org/postgresql/source/v8.3.1/
---&gt;  Verifying checksum(s) for postgresql83
---&gt;  Extracting postgresql83
---&gt;  Configuring postgresql83
---&gt;  Building postgresql83
---&gt;  Staging postgresql83 into destroot
---&gt;  Installing postgresql83 8.3.1_0

To use the postgresql server, install the postgresql83-server port
---&gt;  Activating postgresql83 8.3.1_0
---&gt;  Cleaning postgresql83
---&gt;  Fetching postgresql83-server
---&gt;  Verifying checksum(s) for postgresql83-server
---&gt;  Extracting postgresql83-server
---&gt;  Configuring postgresql83-server
---&gt;  Building postgresql83-server with target all
---&gt;  Staging postgresql83-server into destroot
---&gt;  Creating launchd control script
###########################################################
# A startup item has been generated that will aid in
# starting postgresql83-server with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:
#
# sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql83-server.plist
###########################################################
---&gt;  Installing postgresql83-server 8.3.1_0

To create a database instance, after install do
 sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb
 sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
 sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'

To tweak your DBMS, consider increasing kern.sysv.shmmax by adding an increased kern.sysv.shmmax .. to /etc/sysctl.conf
---&gt;  Activating postgresql83-server 8.3.1_0
---&gt;  Cleaning postgresql83-server&lt;br type="_moz" /&gt;&lt;/pre&gt;

&lt;div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;On va se contenter d&amp;#8217;&amp;eacute;couter ce qu&amp;#8217;on nous dis et ex&amp;eacute;cuter les commandes suivantes (vous pouvez aussi copier-coller depuis votre shell pour simplifier):&lt;/p&gt;
&lt;pre&gt;
$&gt; sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb
$&gt; sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
$&gt; sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locales
  COLLATE:  C
  CTYPE:    UTF-8
  MESSAGES: C
  MONETARY: C
  NUMERIC:  C
  TIME:     C
The default database encoding has accordingly been set to UTF8.
initdb: could not find suitable text search configuration for locale UTF-8
The default text search configuration will be set to "simple".

fixing permissions on existing directory /opt/local/var/db/postgresql83/defaultdb ... ok
creating subdirectories ... ok
selecting default max_connections ... 20
selecting default shared_buffers/max_fsm_pages ... 2400kB/20000
creating configuration files ... ok
creating template1 database in /opt/local/var/db/postgresql83/defaultdb/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

    /opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb
or
    /opt/local/lib/postgresql83/bin/pg_ctl -D /opt/local/var/db/postgresql83/defaultdb -l logfile start&lt;br type="_moz" /&gt;&lt;/pre&gt;
&lt;blockquote&gt; &lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Troisi&amp;egrave;me &amp;eacute;tape : lancement du serveur au d&amp;eacute;marrage de la machine&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt; &lt;/blockquote&gt;
&lt;pre&gt;
$&gt; sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql83-server.plist&lt;br type="_moz" /&gt;&lt;/pre&gt;
&lt;blockquote&gt; &lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Quatri&amp;egrave;me &amp;eacute;tape : modification de l&amp;#8217;environnement&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;p&gt;Les binaires de postgreSQL ne sont pas accessibles directement, une petite modification de votre variable PATH vous donnera pleinement acc&amp;egrave;s &amp;agrave; tous les binaires et les scripts rails de&amp;nbsp;cr&amp;eacute;ation/suppression de base de donn&amp;eacute;es marcheront comme un charme. J&amp;#8217;ai effectu&amp;eacute; cette modification dans le fichier .bash_login de mon utilisateur normal :&lt;/p&gt;
&lt;pre&gt;
export PATH=~/bin:/opt/local/bin:/opt/local/sbin:/opt/local/apache2/bin:/opt/local/lib/postgresql83/bin:$PATH&lt;br type="_moz" /&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;D&amp;eacute;tail ayant son importance,&amp;nbsp;il vous faut soit relancer un shell, soit lancer la commande dans le shell courant pour pouvoir esp&amp;eacute;rer poursuivre l&amp;#8217;installation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Cinqui&amp;egrave;me &amp;eacute;tape : installation pour rails&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il y a 3 gems ruby diff&amp;eacute;rents pour postgreSQL. Ca fait un peu beaucoup. Quelques recherches nous orientent rapidement vers postgres :&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;officiellement maintenu par la communaut&amp;eacute; postgreSQL&lt;/li&gt;
    &lt;li&gt;support natif et rapide comme le gem mysql&lt;/li&gt;
    &lt;li&gt;derni&amp;egrave;res releases datent de cette ann&amp;eacute;e, alors que pour d&amp;#8217;autres on remonte &amp;agrave; 2006&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On tente donc une installation qui va &amp;eacute;chouer vu que le postgres &amp;agrave; &amp;eacute;t&amp;eacute; compil&amp;eacute; avec le seul support de l&amp;#8217;architecture i386. Il nous faut donc lancer la commande suivante :&lt;/p&gt;
&lt;pre&gt;
$&gt; sudo env ARCHFLAGS="-arch i386" gem install postgres
Building native extensions.  This could take a while...
Successfully installed postgres-0.7.9.2008.01.28
1 gem installed
Installing ri documentation for postgres-0.7.9.2008.01.28...
Installing RDoc documentation for postgres-0.7.9.2008.01.28...&lt;br type="_moz" /&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Sixi&amp;egrave;me &amp;eacute;tape : g&amp;eacute;rer les droits et acc&amp;egrave;s sur une machine de d&amp;eacute;veloppement&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous d&amp;eacute;veloppez sur votre machine personnelle et voulez donc &amp;eacute;viter la complexit&amp;eacute; d&amp;#8217;avoir un serveur SQL avec une authentification &amp;#8230; comme votre setup actuel sur MySQL. Pour cela, il vous faudrait vous connecter en user postgres avec le role postgres mais ca semble compliqu&amp;eacute;. Soit, cr&amp;eacute;ons donc un autre super-utilisateur pour votre login. Je vous laisse faire la substitution vous m&amp;ecirc;me :&lt;/p&gt;
&lt;pre&gt;
$&gt; createuser --superuser rider -U postgres&lt;br type="_moz" /&gt;&lt;/pre&gt;
&lt;blockquote&gt; &lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;On me signale qu&amp;#8217;il est bon de rappeler que cette configuration est &amp;nbsp;&amp;agrave; proscrire en environnement de production ;)&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Derni&amp;egrave;re &amp;eacute;tape : tester dans une application existante utilisant l&amp;#8217;antique MySQL&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;p&gt;On substitue l&amp;#8217;adapter et l&amp;#8217;user dans le fichier database.yml :&lt;/p&gt;
&lt;pre&gt;
  adapter: postgresql
  username: postgres&lt;br type="_moz" /&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Et on lance les petites commandes pour tester que tout va bien :&lt;/p&gt;
&lt;pre&gt;
$&gt; rake db:create:all
$&gt; rake db:migrate
$&gt; rake db:fixtures:load
$&gt; rake test:units&lt;br type="_moz" /&gt;&lt;/pre&gt;
&lt;blockquote&gt; &lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Sources :&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.robbyonrails.com/articles/2007/06/19/installing-ruby-on-rails-and-postgresql-on-os-x-second-edition"&gt;http://www.robbyonrails.com/articles/2007/06/19/installing-ruby-on-rails-and-postgresql-on-os-x-second-edition&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://shifteleven.com/articles/2008/03/21/installing-postgresql-on-leopard-using-macports"&gt;http://shifteleven.com/articles/2008/03/21/installing-postgresql-on-leopard-using-macports&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://wiki.rubyonrails.org/rails/pages/PostgreSQL"&gt;http://wiki.rubyonrails.org/rails/pages/PostgreSQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 09 May 2008 13:57:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:212d2842-6fa9-4006-b02d-2461f9f06fe2</guid>
      <comments>http://fabien.jakimowicz.com/articles/2008/05/09/rails-sur-postgresql-pour-leopard#comments</comments>
      <category>rails</category>
      <category>rails</category>
      <category>leopard</category>
      <category>postgres</category>
      <category>postgresql</category>
      <category>ror</category>
      <category>mysql</category>
      <category>ports</category>
      <category>macports</category>
      <trackback:ping>http://fabien.jakimowicz.com/trackbacks?article_id=rails-sur-postgresql-pour-leopard&amp;day=09&amp;month=05&amp;year=2008</trackback:ping>
      <link>http://fabien.jakimowicz.com/articles/2008/05/09/rails-sur-postgresql-pour-leopard</link>
    </item>
    <item>
      <title>dynamisme du langage et patch</title>
      <description>&lt;p&gt;&amp;nbsp;D&amp;eacute;veloppant un projet faisant un appel &amp;agrave; un webservice pour un client, je dois passer des Arrays tel un formulaire html classique. J&amp;#8217;ai donc naturellement utilis&amp;eacute; les fonction r&amp;eacute;seau du langage Ruby, vu que le framework que j&amp;#8217;utilise pour ce projet n&amp;#8217;est autre que le Ruby on Rails. Je me retrouve donc avec une librairie maison pour g&amp;eacute;rer mes appels vers ce webservice, mais petite surprise dans l&amp;#8217;encodage des fameux Arrays : les entr&amp;eacute;es du tableaux sont simplement concat&amp;eacute;n&amp;eacute;es les unes aux autres.&lt;/p&gt;

&lt;p&gt;On est loin de ce que devrait faire un Array dans ce cas pr&amp;eacute;cis !&lt;/p&gt;

&lt;p&gt;&amp;nbsp;Pour rappel, un Array nomm&amp;eacute; test avec 3 valeurs pass&amp;eacute; dans une requ&amp;ecirc;te POST devrait ressembler &amp;agrave; ceci :&lt;/p&gt;

&lt;p&gt;&lt;span class="Apple-style-span" style="color: rgb(32, 32, 32); font-family: 'Lucida Grande'; font-size: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;
&lt;pre style="font-family: courier, sans-serif; "&gt;
test[]=one&amp;test[]=two&amp;test[]=three&lt;/pre&gt;
&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;En fouillant quelque peu sur le net, on trouve en effet mention de ce bug dans la fonction cens&amp;eacute;e encoder les param&amp;egrave;tres dans un format de formulaire web. Bug ouvert il y a environ un an et toujours pas ferm&amp;eacute; bien que le patch ait &amp;eacute;t&amp;eacute; post&amp;eacute;. On trouve m&amp;ecirc;me un exemple du comportement normal avec &amp;#8230; PHP.&lt;/p&gt;

&lt;p&gt;Ne souhaitant pas modifier les sources du langage install&amp;eacute; sur mon syst&amp;egrave;me pour &amp;eacute;viter de devoir reproduire la m&amp;ecirc;me chose sur les serveurs en production, j&amp;#8217;ai d&amp;eacute;cid&amp;eacute; de tirer partie du c&amp;ocirc;t&amp;eacute; dynamique du Ruby en red&amp;eacute;finissant la fonction dans ma petite librairie.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;
module Net::HTTPHeader
  def set_form_data(params, sep = '&amp;')
    params_array = params.map do |k,v|&#194;&#160;
      v.inject([]){|c, val| c &lt;&lt; "#{urlencode(k.to_s)}=#{urlencode(val.to_s)}"}.join(sep)
    end
    self.body = params_array.join(sep)
    self.content_type = 'application/x-www-form-urlencoded'
  end
end&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Ca fait vraiment plaisir de travailler avec un langage certes imparfait mais qui permet des corrections dynamiques sans hack immonde ou patch totalement horrible &amp;agrave; maintenir en production.&lt;/p&gt;</description>
      <pubDate>Fri, 18 Apr 2008 00:32:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:de55ace3-13df-4809-93bc-36d536bdc1b8</guid>
      <comments>http://fabien.jakimowicz.com/articles/2008/04/18/dynamisme-du-langage-et-patch#comments</comments>
      <category>geek</category>
      <category>rails</category>
      <category>ruby</category>
      <category>http</category>
      <trackback:ping>http://fabien.jakimowicz.com/trackbacks?article_id=dynamisme-du-langage-et-patch&amp;day=18&amp;month=04&amp;year=2008</trackback:ping>
      <link>http://fabien.jakimowicz.com/articles/2008/04/18/dynamisme-du-langage-et-patch</link>
    </item>
    <item>
      <title>Paris, 7 avril 2008</title>
      <description>&lt;p&gt;&amp;nbsp;il neige !&lt;/p&gt;

&lt;p&gt;&amp;nbsp;Je ne sais pas trop si on doit voir cela en bien ou en mal &amp;#8230;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://flickr.com/photos/jakimowicz/2393661237/"&gt;&lt;img alt="" src="http://farm4.static.flickr.com/3203/2393661237_f7c68dbac7.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 07 Apr 2008 02:15:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:94c69cbd-88cd-44fe-a630-f418e1d1a30d</guid>
      <comments>http://fabien.jakimowicz.com/articles/2008/04/07/paris-7-avril-2008#comments</comments>
      <category>mylife</category>
      <trackback:ping>http://fabien.jakimowicz.com/trackbacks?article_id=paris-7-avril-2008&amp;day=07&amp;month=04&amp;year=2008</trackback:ping>
      <link>http://fabien.jakimowicz.com/articles/2008/04/07/paris-7-avril-2008</link>
    </item>
  </channel>
</rss>
