<?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>tyPouypOblOg : Tag rake, everything about rake</title>
    <link>http://www.typouype.org/tag/rake.rss</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Libre, Ruby, Objet, OpenBSD, Programmation</description>
    <item>
      <title>SQLite Backup</title>
      <description>&lt;p&gt;Evolution de la &lt;a href="http://www.bricabox.info"&gt;bricabox&lt;/a&gt; oblige, certain scripts doivent aussi &#233;voluer. C&amp;#8217;est la vie du code, je ne vous apprend rien. C&amp;#8217;est donc le moment de reprendre un peu la &lt;a href="http://www.typouype.org/articles/2007/08/07/rake-sauvegarde-de-base-de-donnee"&gt;tache Rake de backup&lt;/a&gt; pour y ajouter quelque morceau.&lt;/p&gt;


	&lt;p&gt;La bricabox a maintenant un site pour elle, bas&#233; sur &lt;a href="http://radiantcms.org/"&gt;Radiant &lt;span class="caps"&gt;CMS&lt;/span&gt;&lt;/a&gt;, Jean-mi a construit un &lt;a href="http://www.lacomte.net"&gt;portail de la comte&lt;/a&gt; &#233;galement bas&#233; sur RadiantCMS (oui au passage, sont blog &#224; chang&#233; d&amp;#8217;adresse: &lt;a href="http://blog.lacomte.net"&gt;blog.lacomte.net&lt;/a&gt;). Tout les deux n&amp;#8217;ayant pas pour vocation d&amp;#8217;&#234;tre gav&#233; de donn&#233;es, ni d&amp;#8217;avoir beaucoup d&amp;#8217;acc&#232;s en &#233;criture, nous avons tout les deux opt&#233; pour &lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt;. &lt;del&gt;Une petite base de donn&#233;e&lt;/del&gt; un petit programme de gestion de base de donn&#233;e relationnelle &#233;crit en C, tr&#232;s leger, tr&#232;s pratique dans ce genre de cas de figure (pas de configuration complexe, pas de serveur&amp;#8230;).&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://zone.typouype.org/SQLite.gif" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Mais voil&#224;, la tache de backup des bases de donn&#233;e avait &#233;t&#233; &#233;crit uniquement pour les bases de l&amp;#8217;&#233;poque: &lt;a href="http://www-fr.mysql.com/"&gt;MySQL&lt;/a&gt; (je vous passe l&amp;#8217;actu du jour sur le rachat de MySQLAB par Sun Microsystem ? :D). Donc il faut ajouter quelque ligne l&#224; dedans.&lt;/p&gt;


	&lt;p&gt;Un peu de recherche m&amp;#8217;am&#232;ne sur &lt;a href="http://www-128.ibm.com/developerworks/opensource/library/os-sqlite/"&gt;une bonne introduction pour SQLite chez &lt;span class="caps"&gt;IBM&lt;/span&gt;&lt;/a&gt; (enfin, vu la facilit&#233; d&amp;#8217;utilisation, est-ce n&#233;cessaire :D). Tout &#231;a pour finalement ajouter un test et une petite ligne:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;sh &amp;#8220;sqlite3 -batch #{db_config[&amp;#8216;database&amp;#8217;]} .dump &amp;gt; #{backup_file}&amp;#8221;&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Et voil&#224; les taches de backup qui sont &#224; nouveaux op&#233;rationnelles.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Bon reste &#224; voir o&#249; je place ces fichiers&amp;#8230;&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;J&amp;#8217;aime de plus en plus SQLite :) Attention &#224; utiliser avec mod&#233;ration quand m&#234;me&lt;/em&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 16 Jan 2008 23:07:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:07bf10ee-e923-4ecd-b755-9887e07daff8</guid>
      <comments>http://www.typouype.org/2008/01/16/sqlite-backup#comments</comments>
      <category>Ruby</category>
      <category>Rake</category>
      <category>SQL</category>
      <category>SQLite</category>
      <category>Backup</category>
      <category>Bricabox</category>
      <link>http://www.typouype.org/2008/01/16/sqlite-backup</link>
    </item>
    <item>
      <title>Rake: sauvegarde de base de donn&#233;e</title>
      <description>&lt;p&gt;La &lt;a href="http://www.bricabox.info"&gt;bricabox&lt;/a&gt; h&#233;bergent ce blog, &lt;a href="http://www.lacomte.net"&gt;lacomte de jean-mi&lt;/a&gt; ainsi que l&amp;#8217;&lt;em&gt;eternel teaser&lt;/em&gt; (ou le &lt;em&gt;teaser eternel&lt;/em&gt; tout d&#233;pend du point de vue comme d&amp;#8217;habitude) &lt;a href="http://www.zlab.fr"&gt;zlab&lt;/a&gt; tourne avec &lt;a href="http://www.openbsd.org"&gt;OpenBSD&lt;/a&gt;, &lt;a href="http://www.lighttpd.net"&gt;LighTTPD&lt;/a&gt; et &lt;a href="http://www.ruby-lang.org"&gt;Ruby&lt;/a&gt; on &lt;a href="http://rubyonrails.org"&gt;Rails&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Apr&#232;s ce &lt;em&gt;link dropping&lt;/em&gt; permettant de vous cadrer le sujet, je vais vous parl&#233; de &lt;a href="http://rake.rubyforge.org/"&gt;Rake&lt;/a&gt;. C&amp;#8217;est un peu la &lt;a href="http://fr.wikipedia.org/wiki/Make"&gt;make&lt;/a&gt;, la &lt;a href="http://ant.apache.org"&gt;fourmi travailleuse&lt;/a&gt; de ruby. Bien int&#233;gr&#233; avec Rails, ce petit outil vous permet de r&#233;alis&#233; des scripts divers et vari&#233;. Non pas &lt;em&gt;forcement&lt;/em&gt; de la compilation, puisque non n&#233;cessaire en g&#233;n&#233;ral avec ruby, mais on peut par exemple lancer les test unitaires, et dans notre cas faire un &lt;strong&gt;backup de la base de donn&#233;e&lt;/strong&gt;.&lt;/p&gt;


	&lt;p&gt;Et oui, cette outils manquais sur la bricabox. Les sauvegardes &#233;tait &#224; la charge de chacun, et manuel (peu de probl&#232;me cependant pour le &lt;em&gt;teaser&lt;/em&gt; zlab ;-)).&lt;/p&gt;


	&lt;p&gt;Je me suis inspir&#233; de ce que j&amp;#8217;ai pu trouver ici et l&#224; sur la toile, mais mis &#224; mon go&#251;t. 3 taches sont disponible dans ce &lt;em&gt;Rakefile&lt;/em&gt;:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;backup&lt;/strong&gt;
Executer un dump de la base mysql point&#233; par l&amp;#8217;environnement rails (config/database.yml).&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;clean_backup&lt;/strong&gt;
Nettoyer la liste des fichiers de backup disponible. Dans le cas de la bricabox, nous avons opt&#233; pour une sauvegarde journali&#232;re avec rotation &#224; la semaine. On ne garde donc sur l&amp;#8217;emplacement pr&#233;vu &#224; cette effet que 7 fichiers de backup. Charge a nous d&amp;#8217;en faire une copie ailleurs de temps &#224; autres ;-).&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;mail&lt;/strong&gt;
Pas grand chose &#224; voir avec le backup, mais j&amp;#8217;en ai eu besoin. Peut-&#234;tre il faudrais que je le sorte de l&#224; pour le mettre ailleurs&amp;#8230; plus tard. Cette tache vas nous permettre d&amp;#8217;envoyer un mail contenant les liens vers les fichiers de backup (pour un t&#233;l&#233;chargement en local si besoin/envie).&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Pour ex&#233;cuter une tache &lt;em&gt;rake&lt;/em&gt; avec Rails, rien de plus simple. On se place dans le r&#233;pertoire racine de l&amp;#8217;application (ici &lt;a href="http://typosphere.org"&gt;typo&lt;/a&gt; &lt;em&gt;huhu, il en manquais un dans le link dropping :-p&lt;/em&gt;). Puis on appel l&amp;#8217;ex&#233;cutable rake avec le nom de la tache &#224; ex&#233;cuter, ainsi que ces param&#232;tres:&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;/usr/local/bin/rake db:backup DIR=/home/toto/backup RAILS_ENV=production&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Les taches utilisent (enfin c&amp;#8217;est conseill&#233;) les &lt;em&gt;espaces de noms&lt;/em&gt; de Ruby. Cela permet de ne pas trop ce m&#233;langer les pinceaux.&lt;/p&gt;


&lt;pre&gt;
namespace :db do 
  desc "Backup the database to a file. Options: DIR=base_dir RAILS_ENV=production" 
  task :backup =&amp;gt; [:environment] do
(...)
&lt;/pre&gt;

	&lt;p&gt;Si vous souhaitez vous inspirer de ce que nous avons mis en place libre &#224; vous (pas de licence, donc domaine public ;-)).&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://zone.typouype.org/backup.rake"&gt;Le fichier backup.rake&lt;/a&gt;&lt;/p&gt;


	&lt;h4&gt;au passage&amp;#8230;&lt;/h4&gt;


	&lt;p&gt;J&amp;#8217;aime regard&#233; du code (enfin quand il est beau hein). Oui je suis un voyeur, prenez moi pour un fou. Mais laiss&#233; moi vous montrer ici quelques lignes de ce fichier.&lt;/p&gt;


&lt;pre&gt;
def all_backups
  dir = Dir.new(backup_folder)
  dir.entries.select{|e| e =~ /^#{RAILS_ENV}_dump_(.*)$/}.sort.reverse
end
&lt;/pre&gt;

	&lt;p&gt;Certain l&amp;#8217;aurons compris, il s&amp;#8217;agit de filtrer la liste des fichiers d&amp;#8217;un r&#233;pertoire pour ne r&#233;cup&#233;rer que ceux qu&amp;#8217;il nous faut.&lt;/p&gt;


	&lt;p&gt;Les regexp c&amp;#8217;est beau, et j&amp;#8217;ai encore tant &#224; apprendre pour m&amp;#8217;en servir au mieux.
Ruby c&amp;#8217;est beau, et j&amp;#8217;ai encore tant &#224; apprendre pour m&amp;#8217;en servir au mieux.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;c&amp;#8217;est le refrain d&amp;#8217;un futur teaser vocal :-p&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;La tache &lt;strong&gt;mail&lt;/strong&gt; m&#233;rite s&#251;rement d&amp;#8217;&#234;tre reprise, am&#233;lior&#233;, int&#233;grer au &lt;strong&gt;syst&#232;me de notification&lt;/strong&gt; contenu dans &lt;a href="http://typosphere.org"&gt;Typo&lt;/a&gt;. Mais pour le moment &#231;a marche comme &#231;a&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Et non je ne suis pas en vacance. Je n&amp;#8217;avais rien a poster, c&amp;#8217;est tout :-p&lt;/em&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 07 Aug 2007 13:24:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:31bdb70d-7a87-4043-8881-f9f8a578bd58</guid>
      <comments>http://www.typouype.org/2007/08/07/rake-sauvegarde-de-base-de-donnee#comments</comments>
      <category>Rake</category>
      <category>Ruby</category>
      <category>Rails</category>
      <category>Code</category>
      <link>http://www.typouype.org/2007/08/07/rake-sauvegarde-de-base-de-donnee</link>
    </item>
  </channel>
</rss>
