<?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? : Archives for May 2008</title>
    <link>http://fabien.jakimowicz.com/articles/2008/05.rss</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <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>
  </channel>
</rss>
